在PowerShell脚本中使用变量

时间:2018-02-14 14:31:23

标签: powershell

我试图将一小部分简单脚本集合在一起,以便让PowerShell变得更轻松,但这些脚本中的变量存在一些问题。

在Linux环境中,我会在我的脚本中使用一个变量(通常是1美元,2美元等等),这样可以使事情变得更容易

sed -i 's/$1/$2/g' filename.conf

所以我需要做的就是这个

./findreplace.sh old new filename.conf

在powershell中,我希望实现类似的功能,特别是使用此命令:

Get-ADPrincipalGroupMembership account.name | select name

在这种情况下,1美元将是' user.name'是的,所以我会这样做:

 .\groups.ps1 user.name

有没有这方面的设施?

2 个答案:

答案 0 :(得分:3)

Groups.ps1应具有以下内容:

param( $user )

Get-ADPrincipalGroupMembership $user | Select Name

然后您可以如图所示调用它,或调用.\Groups.ps1 -user user.name

但是,我可能会尝试将其作为"高级命令",并允许它处理多个名称,以及通过管道传入的名称:

[CmdletBinding()]

param (
    [Parameter(ValueFromPipeline=$true;ValueFromPipelineByPropertyName=$true)]
    [Alias("Identity","sAMAccountName")
    string[] $Users
)

PROCESS {
    ForEach ($User in $Users) {
        Get-ADPrincipalGroupMembership $User | Select Name
    }
}

还允许您执行Get-ADUser | .\Groups.ps1

之类的操作

答案 1 :(得分:1)

您可以在上面添加for循环表单示例脚本:

for ($i = 0; $i -lt $args.Length; $i++) { Set-Variable -Scope Script -Name ($i + 1) -Value $args[$i] }

Write-Host "1: $1"
Write-Host "2: $2"

但更简单的是将脚本参数声明为:

param($1, $2)

Write-Host "1: $1"
Write-Host "2: $2"

顺便说一下,将变量声明为数字是不好的做法。