IF声明不在Powershell中工作

时间:2013-05-01 19:56:38

标签: powershell if-statement powershell-v2.0

我一直试图在我的小PowerShell v2脚本中使用IF-ELSE子句,我认为我的解析存在一些问题。这是我目前的代码:

$dir = test-path C:\Perflogs\TestFolder 

IF($dir -eq "False") 
{
New-Item C:\Perflogs\TestFolder -type directory
get-counter -counter $p -Continuous | Export-Counter  C:\PerfLogs\TestFolder\Client_log.csv -Force -FileFormat CSV -Circular -MaxSize $1GBInBytes
}
Else
{
get-counter -counter $p -Continuous | Export-Counter  C:\PerfLogs\TestFolder\Client_log.csv -Force -FileFormat CSV -Circular -MaxSize $1GBInBytes
}

所以基本上我希望它建立$ dir变量作为测试,以查看我想要的路径是否存在。如果没有,它应该创建该文件夹并运行计数器。如果是,它不应该创建文件夹,但仍应运行计数器。

我在其他地方定义了$ p,并且get-counters语句工作正常。现在,无论文件夹是否存在我都收到有关新项目无效的错误。

我在进行测试后是否使用了错误的运算符-eq?

5 个答案:

答案 0 :(得分:12)

你应该:

if ($dir -eq $false) 

因为字符串"False"不等于布尔值$false

答案 1 :(得分:3)

尝试更改此内容:

IF($dir -eq "False") 

到此:

IF($dir -eq $false) 

答案 2 :(得分:1)

x0n已经回答了,所以我不会重复,但我注意到你应该注意的另一个“问题”。

您的代码正在尝试测试目录“TestFolder”的存在,但是test-path命令不仅限于检查目录。意思是,如果你碰巧有一个同名的文件“TestFolder”,它仍然会返回true。

为了更加小心,您应该添加“-PathType Container”开关,以便在存在该名称的文件时它将失败,并且只有在存在该名称的目录时才会通过。

$dir = test-path C:\Perflogs\TestFolder -PathType Container

答案 3 :(得分:0)

除了关于$false的其他答案之外,我还遇到了v3的语法问题。具体地

if($dir -eq $false)
{

没用。

if($dir -eq $false){

确实有效。 YMMV,但你已被警告过。

答案 4 :(得分:0)

可能有用 如果($? -ne 0)

如果给定的条件为假,则在前面的变量中定义(这不是针对上述问题)

If($dir -contains 'False')