使用PowerShell,我很难找到一种机制来确定路径是否真的不存在,或者我是否对它没有权限。例如,如果我在有效但我没有权限的路径上使用“Test-Path”命令行开关,则结果将为$ false。我更喜欢使用try / catch块来尝试命令并捕获unathorizedAccessException异常或ItemNotFoundException异常并相应地处理响应。
任何帮助将不胜感激。
答案 0 :(得分:1)
如果您正在使用invoke命令并且Acces Denied即将到来,那么您需要使用Cred-SSP
。
例如:
$UserName='<username>'
$securekey= ConvertTo-SecureString '<secure-key>' -AsPlainText -Force;
$credentialdetail= New-Object System.Management.Automation.PSCredential -ArgumentList $UserName,$securekey;
Invoke-Command -Credentials $credentialdetail -ComputerName '<computername>' -Authentication CredSSP -ScriptBlock { '<...>' }
答案 1 :(得分:0)
我个人使用这个.net代码来捕获访问共享或本地路径的异常:
在powershell中添加此类型
add-type @"
using System;
using System.IO;
public class CheckFolderAccess {
public static string HasAccessToWrite(string path)
{
try
{
using (FileStream fs = File.Create(Path.Combine(path, "Testing.txt"), 1, FileOptions.DeleteOnClose))
{ }
return "Allowed";
}
catch (Exception e)
{
return e.Message;
}
}
}
"@
以这种方式使用它:
> [checkfolderaccess]::HasAccessToWrite("\\server\c$\system volume information")
Access to path '\\server\c$\system volume information\Testing.txt' denied.
> [checkfolderaccess]::HasAccessToWrite("\\nonexistingserver\nonexistingpath")
Path not found.