我试图将一小部分简单脚本集合在一起,以便让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
有没有这方面的设施?
答案 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"
顺便说一下,将变量声明为数字是不好的做法。