2016-08-17 76 views
0

这是非常直截了当的。我正在写一个PowerShell功能,我想验证,如果一个参数是一个有效的目录,而不是返回TrueFalse,Test-Path是错误?测试路径错误而不是返回True/False

这与我正在阅读的有关函数行为的内容相反。

if (Test-Path -PathType Container "asdf") 
{ 
    Write-Output "Exists" 
} 
else 
{ 
    Write-Output "Does not exist" 
} 

enter image description here

回答

1

你在SQLSERVER驱动器。您需要将您的位置更改回FileSystem驱动器。

+0

哦,我没有意识到SQL服务器上的PowerShell会在某种驱动器。有没有标准的方法来默认到FileSystem驱动器,或者我只是'Set-Location $ PSScriptRoot'? –

0

您在SQLSERVER驱动器中进行设置。你需要回到你的本地文件系统。继续并做一个

Set-Location C: 

然后你就可以运行你的If语句。

我会评论这第一个答案,是为了澄清如何到达本地文件系统,但我的低信誉限制了我的评论。

2

你接受的答案是对的,但我想扩展你可以做的不同。

直到最近这都是一个问题。 PowerShell's SQL server support has been vastly improved,以至于他们为它创建了一个新模块,所以如果您仍在使用SQLPS,请改用SqlServer模块。

随着SQLPS,它会自动将驱动器更改为SQLSERVER:供应商。

如果您必须继续使用或支持SQLPS,并希望避免这种行为(它也可以使标签完成超慢),我喜欢这种模式:

Push-Location 
Import-Module SQLPS 
Pop-Location 

这可以节省您的当前位置位置堆栈,导入模块(这将改变你的位置),然后弹出你以前的位置,所以你回到你开始的地方。

我强烈建议你看看使用新模块,因为它有一些非常重要的增强和改进。

+1

伟大的信息!我是一名开发人员,但仍在发展我的PowerShell基础并热爱学习新事物。 –