从C#或Dynamics NAV2013执行Powershell脚本

本文关键字:执行 Powershell 脚本 NAV2013 Dynamics | 更新日期: 2023-09-27 18:19:41

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

通过Powershell ISE或在命令行中使用以下命令执行脚本,可以100%运行脚本:

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      

从C#或Dynamics NAV2013执行Powershell脚本

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

另一个StackOverflow问题详细介绍了如何提升System.Diagnostics.Process命令;

startInfo.Verb = "runas";