String 如何检查变量中的特定文本
我编写了一个脚本,它可以连接到远程机器或本地机器,获取环境变量并将它们放入文件中 问题是我有内部和外部主机。每个主机名将以INT或EXT结尾。如果该命令在名称中包含EXT的任何主机上运行,则需要随my PSCredential对象一起提供该命令。如果使用凭据,所有其他主机将无法工作 我的问题是如何确定主机名中是否有String 如何检查变量中的特定文本,string,powershell,contains,String,Powershell,Contains,我编写了一个脚本,它可以连接到远程机器或本地机器,获取环境变量并将它们放入文件中 问题是我有内部和外部主机。每个主机名将以INT或EXT结尾。如果该命令在名称中包含EXT的任何主机上运行,则需要随my PSCredential对象一起提供该命令。如果使用凭据,所有其他主机将无法工作 我的问题是如何确定主机名中是否有“EXT” 如果我在ISE中输入以下内容,它会给我一个正确/错误的答案,并且效果良好, 但是,如果在脚本名为$test时从参数填充该变量,则该变量将与输入的主机名相同 $compuer
“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。当您将
-like
运算符应用于对象集合时,在您的示例中,字符串数组用作筛选运算符,即它只返回满足条件的项
或者更改参数类型:
[Parameter(Mandatory=$true)]
[string]$ComputerName
或逐个连接到每台计算机:
foreach($Name in $ComputerName){
if($Name -like '*ext'){
# Ask for Credential
}
}