【发布时间】:2011-10-08 03:16:33
【问题描述】:
我正在尝试创建一个安装程序包,它不仅可以安装我们的应用程序,还可以将文件复制到远程应用程序服务器并在那里安装服务。我以为我会在自定义操作中覆盖 install 方法,让它启动一个 powershell 脚本来复制文件。不幸的是,当代码调用 powershell 脚本时,我得到了这个 CmdletProviderInvocationException:
系统检测到可能存在危害安全性的尝试。请确保您可以联系对您进行身份验证的服务器。
我能够将我用来调用 powershell 脚本的代码复制到一个测试项目中,它运行得很好,正如我所期望的那样,因为我已经通过 Windows 资源管理器登录到服务器,所以我的用户应该经过身份验证.我认为脚本在安装程序调用时不起作用的原因一定是安装程序切换用户以获得安装应用程序的管理员权限,并且管理员用户未经过身份验证(尽管我可能是错误的)。
有谁知道我怎样才能让它工作?
这是自定义操作代码:
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
string scriptLoc = "c:\\sampleLocation";
pipeline.Commands.AddScript("&\"" + scriptLoc + "\\script.ps1\"");
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();
这是脚本:
$RemotePath = "\\SERVER\C$\Shared\Service"
$Source = "C:\sampleLocation\Service"
Get-ChildItem $Source -Recurse | Copy-Item -Destination $RemotePath
【问题讨论】:
-
您在哪个操作系统上运行您的设置?
-
应该在 Windows 7 和/或 Windows Server 2003 上工作
-
我想我明白了,但它很难看。我有自定义操作调用批处理文件: runas /netonly /user:DOMAIN\user "powershell &'C:\path\script.ps1'" 它确实提示输入密码,这意味着它不是完全自动的。我可能会研究一下 SendKeys(我觉得我正在使用胶带和回形针......)
-
当你在做丑陋的事情时,你可以执行一个 powershell 脚本,以另一个用户的身份执行另一个脚本。这样做您可以将加密的凭据存储在磁盘上。
-
关于它的任何最终解决方案?
标签: c# deployment scripting powershell setup-project