【发布时间】:2019-06-04 06:29:14
【问题描述】:
我正在尝试远程执行一个 Powershell 脚本,该脚本将通过 MSAccess 启动一个 accdb 文件。我能够成功执行 Powershell 脚本,但是 MSAccess 没有启动,因为我知道我拥有的 test.accdb 文件没有得到更新。为了能够启动 MSAccess,我的代码中缺少什么?还是不可能?
我的代码在 IIS 的 Windows 2012 R2 环境中运行,并由对机器具有管理员权限的服务帐户执行。如果我运行以该服务帐户登录的代码,它可以正常工作而没有问题。如果我远程执行它,只执行部分代码
我的 .NET 应用程序代码如下(在服务帐户下运行)。我更改了一些隐私信息,但不影响代码。
internal static HttpStatusCode ExecuteRemoteCommand()
{
WSManConnectionInfo connectioninfo = new WSManConnectionInfo();
connectioninfo.ComputerName = "testcomputer";
using (Runspace runspace = RunspaceFactory.CreateRunspace(connectioninfo))
{
runspace.Open();
using (PowerShell ps = PowerShell.Create())
{
ps.Runspace = runspace;
var re = ps.AddScript(@"\\testcomputer\test\StartTest.ps1");
var results = re.Invoke();
}
}
return HttpStatusCode.Created;
}
我的Powershell代码如下:
try {
$msAccess = "C:\Program Files (x86)\Microsoft Office\Office14\msaccess.exe"
$fileLocation = "C:\test\DBT.accdb"
Start-Process -FilePath $msAccess -ArgumentList $fileLocation -Verb RunAs -WindowStyle Hidden -WorkingDirectory "C:\test"
$today = Get-Date
"SUCCESS: " + $today > "c:\test\TestExecutionSuccess.txt"
}
Catch
{
$_.Exception.Message > "c:\test\TestExecutionError.txt"
}
在这两种情况下,在我本地运行脚本和远程执行脚本的一种情况下,会创建 TestExecutionSuccess.txt 文件。
但是,只有本地测试运行才会更新 DBT.accdb 文件。
【问题讨论】:
-
C# 应用在什么用户下运行?是否在 IIS 下运行?
-
是的,它在服务帐户下的 IIS 下运行。服务帐户 company\testremote 在 testcomputer 服务器上也具有管理员权限,并且是一个 Active Directory 帐户
-
所以问题是因为它没有要加载的屏幕。在您的本地计算机上它可以工作,因为运行代码的用户是您自己,并且您已登录并具有交互权限。当您登录到服务用户时,该用户具有交互权限并加载 Excel。在未作为服务帐户登录的远程计算机上,它在服务用户下运行并且可以写入文件,但它没有交互权限,因此无法加载 GUI。
标签: c# powershell ms-access