2017-04-24 78 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之後。此時,您可能會更好地以常用方式連接到備用憑據下的共享。這只是作爲另一個用戶執行作爲另一個用戶連接之間的差異,每個用戶都有自己的優點和缺點。

相關問題