2017-04-24 59 views
0

只能说有一个网络文件夹\\my_server\my_root\my_dir。 要访问此文件夹,这些凭据需要用户名:my_doman\my_user密码:my_password如何检查网络文件夹是否存在证书使用PowerShell 5

现在在我的程序中首先尝试将网络文件夹映射到本地驱动器。如果有异常,则认为文件夹不存在。我认为这不是一个好方法。

有没有办法检查这个文件夹存在,而不尝试映射到本地驱动器?我正在寻找类似

[System.IO.Path]::Exist("\\my_server\my_root\my_dir","my_doman\my_user","my_password")

我使用Powershell 5

这是我的映射驱动器现在

try{ 
    $net = new-object -ComObject WScript.Network 
    $net.MapNetworkDrive($free_drive, $network_dir, $false, "domain\user", "password") 
}catch{ 
    Write-host: "folder does not exist" 
} 
+0

你现在如何映射驱动器? – BACON

+0

您可以使用'New-PSDrive -Name P -PSProvider FileSystem -Root“\\ my_server \ my_root \ my_dir”-Credential“my_domain \ my_user”' –

+0

@Bacon:添加到问题中。 –

回答

1

使用New-PSDrive

New-PSDrive -Name Q -PSProvider FileSystem -Root \\my_server\my_root\my_dir -Credential my_domain\my_user -Persist 

使用cmdline实用程序的Old School方法:

net use \\my_server\my_root\my_dir /user:my_domain\my_user my_password 
start \\my_server\my_root\my_dir 

对于映射您可以使用此:

$net = New-Object -comobject Wscript.Network 
$net.MapNetworkDrive("Q:","\\my_server\my_root\my_dir",0,"my_domain\my_user","my_password") 

为了测试路径,你可以使用:

Test-Path \\my_server\my_root\my_dir 

注意:您将在从测试得到的回报布尔值路径。

希望它有帮助。

+0

谢谢你的回答!但如果网络文件夹不存在,这些都会失败。我正在寻找一种方法来检查映射之前确实存在的文件夹。因为映射也可能因其他原因而失败。 –

+0

你可以使用'test-path'来检查。让我更新我的答案 –

+2

@RanadipDutta - 使用Test-Path的问题是您无法将凭据传递给它。 –

0

假设执行你能够登录为下要连接到远程共享的用户脚本的计算机上,你可以使用Invoke-Command调用Test-Path作为另一个用户:

$pathExists = Invoke-Command -ComputerName . -Credential $credentials -ScriptBlock { 
    Test-Path -Path "\\my_server\my_root\my_dir" 
} 
if ($pathExists) 
{ 
    # my_dir\ exists 
} 
else 
{ 
    # my_dir\ is inaccessible/non-existent 
} 

目前我无法对此进行测试,但我怀疑由于双跳问题,您可能需要将-Authentication Credssp作为Invoke-Command(假设必需的环境适用)的参数。

当然,如果您正在检查另一个用户下的该目录是否存在,以便为将来的文件系统操作做出决定以便以同一用户身份执行,那么您需要另一批操作或包含他们在Test-Path之后。此时,您可能会更好地以常用方式连接到备用凭据下的共享。这只是作为另一个用户执行作为另一个用户连接之间的差异,每个用户都有自己的优点和缺点。

相关问题