在PowerShell脚本中使用变量

在PowerShell脚本中使用变量,powershell,Powershell,我正试图为PowerShell收集一小部分简单脚本,以简化工作,但这些脚本中的变量存在一些问题 在Linux环境中,我会在脚本中使用这样的变量(通常是$1、$2等),以使事情变得更简单 sed -i 's/$1/$2/g' filename.conf 所以我需要做的就是 ./findreplace.sh old new filename.conf 在powershell中,我希望实现类似的功能,特别是使用以下命令: Get-ADPrincipalGroupMembership account

我正试图为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

是否有此功能?

组。ps1应具有以下内容:

param( $user )

Get-ADPrincipalGroupMembership $user | Select Name
然后,您可以如图所示调用它,或作为
\Groups.ps1-user.name
调用它

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

[CmdletBinding()]

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

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

它还允许您执行类似于“获取ADUser |.\Groups”的操作。ps1应具有以下内容:

param( $user )

Get-ADPrincipalGroupMembership $user | Select Name
然后,您可以如图所示调用它,或作为
\Groups.ps1-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

的操作,您可以在上面添加循环表单示例脚本:

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"

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

您可以在上面添加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"

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

$1
->
$args[0]
$1
->
$args[0]
所以第一个代码注释的工作方式与我预期的完全相同,唯一的区别是我没有使用“-user”部分,而只是使用:。\Groups.ps1 user.name。第二个代码块引发大量错误:(您使用的是哪个版本的PowerShell?似乎并不是所有的AD对象都被创建为相同的,而且我在使用ADPrincipals时遇到了一些问题,其中需要ADUser…Major 5,Minor 1,Build 14393,Revision 1944如果您使用管道版本,如果您使用
(Get ADUser)。samaccountname |。\Groups.ps1
(显然,您可以将参数和过滤器添加到parens中的
Get ADUser
,但不要在parens中使用管道)因此第一个代码注释的工作方式与我预期的完全相同,唯一的区别是我没有使用“-user”部分,而只是使用:。\Groups.ps1 user.name。第二个代码块引发了大量错误:(您使用的是哪个版本的PowerShell?似乎并不是所有的AD对象都被创建为相同的,而且我在使用ADPrincipals时遇到了一些问题,其中需要ADUser…Major 5,Minor 1,Build 14393,Revision 1944如果您使用管道版本,如果您使用
(Get ADUser)。samaccountname |。\Groups.ps1
(显然,您可以将参数和过滤器添加到paren内的
Get ADUser
,但不要在paren内使用管道)