检查UNC路径上的拒绝访问

时间:2012-05-07 21:09:41

标签: powershell

使用PowerShell,我很难找到一种机制来确定路径是否真的不存在,或者我是否对它没有权限。例如,如果我在有效但我没有权限的路径上使用“Test-Path”命令行开关,则结果将为$ false。我更喜欢使用try / catch块来尝试命令并捕获unathorizedAccessException异常或ItemNotFoundException异常并相应地处理响应。

任何帮助将不胜感激。

2 个答案:

答案 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.