Олицетворение создает исключение FileNotFoundException с WindowsIdentity в Powershell - PullRequest
6 голосов
/ 22 июля 2011

Я сталкиваюсь с несколько странной ошибкой при выполнении олицетворения в PowerShell и C #.Выполнение следующего кода не показывает никаких ошибок.

PSObject result = null;
using (PowerShell powershell = PowerShell.Create())
{
    RunspaceConfiguration config = RunspaceConfiguration.Create();
    powershell.Runspace = RunspaceFactory.CreateRunspace(config);
    powershell.Runspace.Open();
    powershell.AddScript(String.Format(CmdletMap[PSVocab.OsBootTime],
                         this.ComputerName));
    result = powershell.Invoke().First();
    powershell.Runspace.Close();
}

return DateTime.Parse(result.ToString());

, где сценарий PS для CmdletMap[PSVocab.OsBootTime] просто:

$info = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $computer
        ; $info.ConvertToDateTime($info.LastBootUpTime)

Приведенный выше код C # работает локально.Однако, как только у меня появился этот же блок с олицетворением Windows, например:

WindowsIdentity ImpersonatedIdentity = new WindowsIdentity(ImpersonateUserName);
WindowsImpersonationContext impersonatedContext
    = ImpersonatedIdentity.Impersonate();
try
{
PSObject result = null;
using (PowerShell powershell = PowerShell.Create())
{
    RunspaceConfiguration config = RunspaceConfiguration.Create();
    powershell.Runspace = RunspaceFactory.CreateRunspace(config);
    powershell.Runspace.Open();
    powershell.AddScript(String.Format(CmdletMap[PSVocab.OsBootTime],
                             this.ComputerName));
    result = powershell.Invoke().First();
    powershell.Runspace.Close();
}

return DateTime.Parse(result.ToString());
} catch (Exception ex) { // do logging here } 

, я получаю следующее исключение:

FileNotFoundException: C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll

, и отладка показывает, что он завершается с ошибкой RunspaceConfiguration.Create().Хотя я не уверен, почему.

Хотя DLL уже зарегистрирована в GAC, но на нее также ссылаются в самом проекте.Также подтвердили, что пути и версия верны.

Ссылки взяты из:

Может ли кто-нибудь дать представление об этом?

1 Ответ

0 голосов
/ 22 июля 2011

Пользователь, от имени которого вы олицетворяете, может не иметь достаточных разрешений для доступа к необходимым файлам PowerShell в GAC.

В качестве быстрой попытки попробуйте дать пользователю (вы подражаете) права локального администратора, чтобы увидеть, работает ли он тогда. Это работает, отзывайте права локального администратора и добавляйте права доступа к файлам по мере необходимости.

...