第1次海报,如果这不正确,那就很抱歉
我是IT SysAdmin / general I.T Admin
背景 我创建了一些单独的PowerShell脚本来执行一些基本的重复性任务,这可能是添加防火墙规则,重命名计算机,在PC上创建本地帐户。为了绕过计算机上的powershell脚本执行策略,我有一个.bat和一个ps1文件。我启动相关的.bat,然后启动执行工作的ps1文件。这些对我自己很好,因为我知道它们是如何工作的,我不介意使用powershell控制台等,但是将所需的.bat / ps1文件复制到计算机,执行然后删除文件然后发送到客户
结束目标:
我的想法是:创建ac#program(我以前从未使用过c#)但是如果我能够学到足够的东西来创建一个带有按钮的程序,那么你可以启动我特定的PowerShell脚本。< / p>
到目前为止我所知道的是什么?
我见过一些链接,例如: https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/ 我猜我可以将单个脚本代码硬编码到每个按钮中吗?但是如果我的脚本改变为im测试/改进,我需要继续重建.exe并更改每个按钮
你能嵌入.exe a .ps1资源吗?所以我可以硬编码&#34;。\ Script1.ps&#34;在按钮发射?而不是D:\ Temp \ Script.ps1 ..我明白我仍然需要每次编译.exe但至少它会更整洁
我试过在这里搜索和谷歌搜索,但我还没有找到我正在寻找的东西。 这是最佳做法吗?我在互联网上看到有人说powershell可以做C#做的事情,反之亦然......我想这样做的原因是我已经创建了powershell脚本,而且它的c#方面只适合我很好的GUI有希望保持一切
非常感谢你的帮助,如果这个问题太长/太乱,我道歉
答案 0 :(得分:2)
这个问题相当普遍和广泛,所以我认为它会受到很多个人决定的影响。最佳实践可能涉及在推送已经适当设置执行策略的映像后运行的自定义签名脚本,但听起来这不适合您。所以,我会研究假设。
由于您谈到最后将计算机发送给客户,我将回答这个问题,并假设您在域 之外的容量中使用脚本,其中最佳做法是是 use code signing (and the RemoteSigned or AllSigned execution policy) 。如果这仍然是一个选项,那么plenty resources已经available。
您还提到将文件复制到计算机并在之后必须删除它们,这样可以驱动您想要的文件尽可能少。我再次假设这是由于需要让人们在特定时间运行特定脚本,具体原因(这就是你想要GUI的原因)。
您还要提到您的目标是从用户视图中删除PoSh控制台,但之后您会谈到拥有GUI,因此我假设运行脚本的人不喜欢处理复杂性。< / p>
C#Route
所以,让我们说这是一个足够大的交易来花时间学习C#。当您invoke PowerShell from C#时,您仍然需要遵守机器的执行策略,因为您仍然在C#中启动PowerShell主机。因此,您将处理更改执行策略(然后在完成后更改它)。根据脚本的长度,您可以使用嵌入式资源,或者只需将它们保存为字符串。
就像你说的那样,你必须考虑更新GUI和按钮,以便在事情发生变化时启动脚本,这样可能会变得混乱和快速。
PoSh中的GUI
如果你真的想拥有一个GUI,没有人可以说服你,那么有很多工具可以帮助你,如果你不想自己做编码(protip:不要) 。寻找那些直接在你的PoSh代码中构建它的代码,这样它就会保留一个文件,但要注意有些文件会使代码变得非常混乱。
我的建议
可以说,根据您的需要,最佳解决方案可能不是best practice。为了使其保持在您的问题的相对范围内,我将执行以下操作:
你仍然会有一个.bat文件和一个PoSh脚本,但是你的用户会更容易使用,它会在完成后自行清理,最重要的是,你不会有学习C#的开销和必须完成维护和重新编译.exe文件的所有额外工作。