【发布时间】:2019-05-19 16:25:29
【问题描述】:
我有一个 PowerShell 脚本,我想在继续之前确保某些变量具有值。
所以我有以下内容:
$dataRow = $sheet.Cells.Find($country).Row
$serverCol = $sheet.Cells.Find($serverString).Column
$databaseCol = $sheet.Cells.Find($databaseString).Column
$userCol = $sheet.Cells.Find($userString).Column
$passwordCol = $sheet.Cells.Find($passString).Column
$partnerCol = $sheet.Cells.Find($partnerString).Column
#All variables in this array are required. If one is empty - the script cannot continue
$requiredVars = @($dataRow, $serverCol, $databaseCol, $userCol, $passwordCol, $partnerCol)
但是当我像这样遍历数组时:
foreach ($var in $requiredVars)
{
Write-Host DataRow = ($dataRow -eq $var)
Write-Host ServerCol = ($serverCol -eq $var)
Write-Host DatabaseCol = ($databaseCol -eq $var)
Write-Host UserCol = ($userCol -eq $var)
Write-Host PasswordCol = ($passwordCol -eq $var)
Write-Host PartnerCol = ($partnerCol -eq $var)
if ($var -eq $null)
{
[System.Windows.Forms.MessageBox]::Show("No data found for given string!")
$excel.Quit()
return
}
}
我总是得到消息框。我添加了“Write-Host”部分来查看每个变量的值,然后更改它以查看哪个变量为空,但所有变量都包含值,并且您在此处看到的所有检查都返回“False”。
我想知道我做错了什么以及$requiredVars 数组是否只复制值,而不是引用或其他东西。
【问题讨论】:
-
一种令人困惑的写法。当然,这些语句中的 80%将返回 false。
-
另外,你应该改写
$null -eq $var。你试过吗?看这里:rencore.com/blog/powershell-null-comparison -
在将值添加到数组之前是否检查过?
-
@montonero,我没有,但有区别吗?
-
@marsze,为什么会让人困惑?如果您的意思是“写主机”位,那仅用于调试/测试目的。但我仍然欢迎任何关于改进的建议。请透露。
标签: arrays powershell