我已经编写了一个脚本,该脚本可以到达远程计算机或本地计算机,并获取环境变量并将其放入文件中。
问题是我有内部和外部主机。每个主机名将以INT或EXT结尾。如果该命令在名称为EXT的任何主机上运行,则需要将其与我的PSCredential对象一起提供。如果使用凭据,所有其他主机将无法正常工作。
我的问题是如何确定主机名中是否包含"EXT"
。
如果我将以下内容放入ISE,则可以判断是非,并可以正常工作, 但是,如果在脚本名为$ test时从参数中填充了该变量,则最终将成为输入的主机名。
$compuername = "HOSTNAME1ext"
$test = $compuername -like "*ext"
if ($test -eq $true) {Write-Host "yes"} else {Write-Host "no"}
yes
但是当以这种方式使用时,它不起作用
[cmdletbinding()]
param(
[Parameter(Mandatory=$true)]
[string[]]$ComputerName = $env:ComputerName,
[string]$Name
)
$test = $ComputerName -like "*ext"
if ($test -eq $true) {
$UNPASSWORD = Get-Credential -UserName "$ComputerName\ACCOUNT" -message "Enter the Password for the ACCOUNT Account";$EnvObj = @(Get-WMIObject -Class Win32_Environment -ComputerName $ComputerName -Credential $UNPASSWORD -EA Stop)
} else {$EnvObj = @(Get-WMIObject -Class Win32_Environment -ComputerName $ComputerName -EA Stop)}
完成此操作后,$ test作为输入的主机名返回,而不是True或False。
答案 0 :(得分:1)
在将-like
运算符应用于对象的 collection 时,在您的示例中,字符串数组(如果用作 filter 运算符)即-。它只返回满足条件的项目。
更改参数类型:
[Parameter(Mandatory=$true)]
[string]$ComputerName
或一一连接到每台计算机:
foreach($Name in $ComputerName){
if($Name -like '*ext'){
# Ask for Credential
}
}