当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 周五乐趣:使用 PowerShell 回到学校

作者:精品下载站 日期:2024-12-14 07:59:44 浏览:13 分类:玩电脑

周五乐趣:使用 PowerShell 回到学校


[玩转系统] 周五乐趣:使用 PowerShell 回到学校

为了今天与 PowerShell 的乐趣,我想分享一下我最近的 Iron Scripter 挑战的解决方案。如果您不熟悉这些挑战(您应该熟悉),它们旨在测试您的 PowerShell 技能,并希望帮助您学习新知识。所有技能水平都面临着挑战,您可以在闲暇时应对它们。最近的挑战被称为“返校”活动。我们的任务是构建一组函数来解决您小时候最有可能遇到的数学问题类型。

对于 PowerShell 初学者,您可以使用标准数学运算符创建数学表达式。例如,计算圆的面积。

$diameter = 7
$r = $diameter/2
3.14*($r*$r)

这非常简单。更有经验的 PowerShell 脚本编写者可能会使用 [Math] .NET 类。没有用于使用此类的本机 cmdlet。它的所有方法和属性都是静态的。这是与上面的[数学]等效的内容。

[math]::pi*[math]::pow($r,2)

我怎么知道该用什么?让 PowerShell 向您展示。在控制台中,输入 [math]::,然后按 Ctrl+Space。假设您已加载标准 PSReadline 模块,您应该会看到所有静态属性和方法。

如果运行上面的表达式,您将得到 38.484510006475。您可能想要格式化该数字。是的,您可以使用 -f 运算符,但最终会得到一个字符串。如果可以的话,我喜欢将数字保留为数字。如果你只是想要一个四舍五入的整数,你可以这样做:

[math]::pi*[math]::pow($r,2) -as [int]

或者,如果您想修剪小数点,请使用 [Math] 类和 Round() 方法。

$raw = [math]::pi*[math]::pow($r,2)
[math]::round($raw,2)

为了清楚起见,我将其分为两个步骤。您可以轻松地将其组合成一个表达式。现在我的结果被格式化为小数点后两位,并且仍然是一个数字。从技术上讲,它是一个[双]。我在我的解决方案中使用了这些技术,如下所示:

Function Get-CircleArea {
    [cmdletbinding()]
    Param(
        [parameter(Mandatory, HelpMessage = "Enter a circle diameter between 1 and 10")]
        [ValidateRange(1, 10)]
        [double]$Diameter,
        [ValidateRange(2, 8)]
        [int]$Decimal = 2
    )

    Write-Verbose $($myinvocation.mycommand)
    Write-Verbose "Calculating area of a circle with a diameter of $Diameter"
    $pi = [math]::pi
    $r = $Diameter / 2
    Write-Verbose "Using a radius of $r"
    $area = $pi * ([math]::pow($r, 2))
    Write-Verbose "Raw area = $area"
    [pscustomobject]@{
        PSTypename = "PSCircleArea"
        Diameter   = $Diameter
        Radius     = $r
        Area       = [math]::round($area, $decimal)
    }
} #Get-CircleArea

我的函数将自定义对象写入管道。

[玩转系统] 周五乐趣:使用 PowerShell 回到学校

[玩转系统] 周五乐趣:使用 PowerShell 回到学校

更多的是作为一个教学机会,我想创建此类对象的格式化视图。自定义格式需要创建特殊的 ps1xml 文件,这可能很乏味。相反,我使用 PSScriptTools 模块中的 New-PSFormatXML 命令。

$new = @{
 FormatType = "Table" 
 GroupBy = "Form" 
 Properties = "Diameter","Radius","Formatted"
 ViewName = "default"
 Path  = ".\pscylinder.format.ps1xml"
}
Get-CylinderVolume -Diameter 1 -Height 1 |
New-PSFormatXML @new

Update-FormatData .\pscylinder.format.ps1xml

这将创建 ps1xml 文件,然后将其加载到我的会话中。现在我得到了我想要的格式化结果。

[玩转系统] 周五乐趣:使用 PowerShell 回到学校

  • 参数验证
  • 定义别名
  • 使用详细消息
  • 自定义对象创建

挑战的全部目的是学习并最好享受一点乐趣。我知道我比我想象的更喜欢这个挑战。享受。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯