从C#或Dynamics NAV2013执行Powershell脚本

时间:2014-08-26 22:16:07

标签: c# powershell-v3.0 dynamics-nav

我现在尝试了大约一百种自动执行C#和Dynamics NAV 2013中的PowerShell脚本的方法。

运行脚本100%从Powershell ISE工作或在命令行中使用以下命令执行:

powershell.exe -version 3.0 -command ". 'C:\temp\script.ps1'"

所以我现在尝试的最后一个选项是将所有这些都放在一个.bat文件中并使用System.Diagnostics.Process执行.bat文件(同样,手动执行.bat文件也可以100%工作)

Setup.GET;
ProcessInfo := ProcessInfo.ProcessStartInfo(FileName); //The .bat File
ProcessInfo.UseShellExecute := FALSE;
ProcessInfo.RedirectStandardError := TRUE;

//<< Credentials
ProcessInfo.Domain := Setup.Domain;
ProcessInfo.UserName := Setup.Username;

SecurePwd := SecurePwd.SecureString();

FOR i := 1 TO STRLEN(Setup.Password) DO
  SecurePwd.AppendChar(Setup.Password[i]);

ProcessInfo.Password := SecurePwd;
//>> Credentials

Process := Process.Start(ProcessInfo);
StreamReader := Process.StandardError();

MESSAGE(StreamReader.ReadToEnd());

在没有设置凭据的情况下,我从消息输出:

The handle is invalid.
The handle is invalid.
The handle is invalid.
The handle is invalid.
The handle is invalid.
Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

它只是抱怨脚本中每一行的内容。

Import-Module : The specified module 'D:\psmodules\Multitenancy\NAVMultitenancySamples.psm1' was not loaded because no valid module file was found in any module directory.

等。等

填写完凭据后,消息为空白但未执行任何预期的操作。

现在,从消息中我可以看到它正在尝试访问Powershell版本1的注册表项而不是3 ...这可能是问题的一部分吗? 版本3已安装:

PS C:\> $Host.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
3      0      -1     -1      

1 个答案:

答案 0 :(得分:0)

你有没有检查过UAC方面的事情?它可能需要UAC权限,而不仅仅是管理员凭据;

This other StackOverflow question详细说明了如何提升System.Diagnostics.Process命令;

startInfo.Verb = "runas";