PowerShell return 来自 if 条件的多个值
PowerShell return multiple values from if condition
我有一个 Powershell 脚本 returning 来自 API 的数据,只要我只尝试 return 一个 $device.realm,它就可以正常工作,但我需要多个领域。我是 PS 的新手。
非常感谢这里的任何帮助
这是我的代码
$Output = forEach ($devices in $devices) {
if ($device.realmName -eq 'Archive') {
[PSCustomObject]@{
HostName = $device.name
IPAddress = $device.primaryInterfaceAddress
Realm = $device.realmName
SerialNumbers = (($device.dynamicFields | where { $_.name -EQ "serial number" } | Select-Object -ExpandProperty values) -join "," | out-string).TrimEnd()
}| Select-Object Hostname,IPAddress,Realm,SerialNumbers | Export-csv C:\temp\Archive.csv -notype -Append
}
我需要 return 多个 $device.realm,如
如果 ($device.realmName -eq 'Archive' -and 'Default' -and 'Farms')
一旦我添加了额外的 - 并且每个领域都是 returned 而不是我需要 return.
我认为这里的问题是您正在查询的 If 块中的语句 ($device.realmName -eq 'Archive' -and 'Default' -and 'Farms')
不是,当逻辑评估时“如果设备领域名称是存档、默认或农场,则评估为真”。它正在评估 device.realmname 是否存档,然后仅将示例中的两个 -and 解释为 true,因为它们不是查询比较,而是查询非空字符串的存在。不确定是什么导致 return 一切,我必须看一些更直接的例子才能确定,但根据我的经验,当你在指向非空字符串的比较中包含 -or 时最常见, 这将使整个陈述为真。
我的建议如下:对于这种情况,使用 powershell 内置的正则表达式运算符。你可以使用
if($device.realmname -eq 'Archive' -or $Device.realmname -eq 'farm' -or $device.realmname -eq 'Default')
我相信 return 您正在寻找的东西,但我觉得它有点复杂。我发现,对单个 属性 的更复杂的查询最容易通过 -match 来完成,通过调用 -match 运算符,它允许您构建一个可以包含 Or 或 And 的正则表达式查询语句,并且更简单一些一个语法,像这样:
if($Device.realmName -match 'Archive|Farm|Default')
我有一个 Powershell 脚本 returning 来自 API 的数据,只要我只尝试 return 一个 $device.realm,它就可以正常工作,但我需要多个领域。我是 PS 的新手。 非常感谢这里的任何帮助
这是我的代码 $Output = forEach ($devices in $devices) {
if ($device.realmName -eq 'Archive') {
[PSCustomObject]@{
HostName = $device.name
IPAddress = $device.primaryInterfaceAddress
Realm = $device.realmName
SerialNumbers = (($device.dynamicFields | where { $_.name -EQ "serial number" } | Select-Object -ExpandProperty values) -join "," | out-string).TrimEnd()
}| Select-Object Hostname,IPAddress,Realm,SerialNumbers | Export-csv C:\temp\Archive.csv -notype -Append
}
我需要 return 多个 $device.realm,如 如果 ($device.realmName -eq 'Archive' -and 'Default' -and 'Farms')
一旦我添加了额外的 - 并且每个领域都是 returned 而不是我需要 return.
我认为这里的问题是您正在查询的 If 块中的语句 ($device.realmName -eq 'Archive' -and 'Default' -and 'Farms')
不是,当逻辑评估时“如果设备领域名称是存档、默认或农场,则评估为真”。它正在评估 device.realmname 是否存档,然后仅将示例中的两个 -and 解释为 true,因为它们不是查询比较,而是查询非空字符串的存在。不确定是什么导致 return 一切,我必须看一些更直接的例子才能确定,但根据我的经验,当你在指向非空字符串的比较中包含 -or 时最常见, 这将使整个陈述为真。
我的建议如下:对于这种情况,使用 powershell 内置的正则表达式运算符。你可以使用
if($device.realmname -eq 'Archive' -or $Device.realmname -eq 'farm' -or $device.realmname -eq 'Default')
我相信 return 您正在寻找的东西,但我觉得它有点复杂。我发现,对单个 属性 的更复杂的查询最容易通过 -match 来完成,通过调用 -match 运算符,它允许您构建一个可以包含 Or 或 And 的正则表达式查询语句,并且更简单一些一个语法,像这样:
if($Device.realmName -match 'Archive|Farm|Default')