C# 通过c运行powershell脚本#
我有几个问题。下面是它的工作原理。在windows窗体上,用户单击按钮。该按钮执行cmd脚本,然后cmd脚本执行powershell脚本 为什么要问cmd脚本?嗯,如果我点击按钮运行powershell脚本,我在签名方面会遇到问题 在powershell脚本的开头,我将执行策略设置为unrestricted。如果我直接通过powershell运行脚本,这会完全改变执行策略,并且脚本可以正常工作。如果我让用户单击按钮运行powershell脚本,它会说我在签名方面有问题,即使执行策略设置为“无限制”!荒唐的我发现在cmd脚本中设置执行策略修复了这个问题,这就是我在单击按钮时运行powershell脚本的方式。不管怎样,这是一个工作,它的工作C# 通过c运行powershell脚本#,c#,powershell,cmd,C#,Powershell,Cmd,我有几个问题。下面是它的工作原理。在windows窗体上,用户单击按钮。该按钮执行cmd脚本,然后cmd脚本执行powershell脚本 为什么要问cmd脚本?嗯,如果我点击按钮运行powershell脚本,我在签名方面会遇到问题 在powershell脚本的开头,我将执行策略设置为unrestricted。如果我直接通过powershell运行脚本,这会完全改变执行策略,并且脚本可以正常工作。如果我让用户单击按钮运行powershell脚本,它会说我在签名方面有问题,即使执行策略设置为“无限制
我现在的问题是我有一个cmd脚本,它调用powershell脚本来更改注册表项。这是通过点击按钮再次完成的。它看起来很好,似乎一切都正常,但键的值没有改变。现在,如果我只是在没有windows窗体应用程序的情况下运行cmd脚本,则键的值会发生变化。为什么会这样?我认为您的实际问题是“如何从C#调用Powershell脚本,并确保它以管理权限运行?” 答案是“模仿”:
在我的windows窗体程序中,我有一个按钮单击事件调用cmd脚本。它看起来工作正常,没有崩溃,cmd按它应该的方式执行,它写入主机,它休眠10秒钟。但是注册表项永远不会改变。但我的第一个powershell重命名脚本和cmd示例只需单击windows窗体上的一个按钮就可以完美地工作。所以我不明白。使用automation.runspaces名称空间给我带来了很多问题。我是一名学生,我在一所大学工作。我正在使用大学计算机和大学域名。长话短说,我放弃了使用运行空间,我只是用c#打开powershell并执行脚本。这不起作用,所以我写了一些cmd脚本。下面是一个有效的示例: Powershell脚本: 重命名为Mac地址 如果我在powershell中运行上面的脚本,它就会工作。如果我使用Process.Start(powershell.exe,“C:\myscript”);在c#中,它不会运行。即使设置执行策略也无济于事。因此,我使用cmd脚本,如下所示: cmd脚本: powershell-noexit-executionpolicy无限制“C:\myscript.ps1” 它执行 现在我有以下几点: Powershell脚本: 设置ItemProperty“HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”-名称AutoAdminLogon-值0 写入主机“更改注册表” 开始睡眠-s10 cmd脚本: powershell-noexit-executionpolicy无限制“C:\Windows\ITS\ChangeRegistry.ps1” 在我的windows窗体程序中,我有一个按钮单击事件调用cmd脚本。它看起来工作正常,没有崩溃,cmd按它应该的方式执行,它写入主机,它休眠10秒钟。但是注册表项永远不会改变。但我的第一个powershell重命名脚本和cmd示例只需单击windows窗体上的一个按钮就可以完美地工作。所以我就是不明白
$OS = Get-WmiObject Win32_OperatingSystem
$NIC = Get-WmiObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq “TRUE”}
$PC = Get-WmiObject -class Win32_ComputerSystem
if($NIC.MacAddress -eq $null)
{
Write-Host "No Network Connection! The PC will not be renamed until the network is enabled"
}
else
{
$MacAddress = $NIC.MacAddress
$NewPCName = "PC-" + $MacAddress.Substring(0) -replace ':'
$PC.Rename($NewPCName)
Write-Host -ForegroundColor Green "New PC Name"
$NewPCName
}
write-Host "The PC has been renamed and will restart in 5 seconds."
start-sleep -s 5
restart-computer