0

我有几个问题。这是它的工作原理。在 Windows 窗体上,用户单击按钮。该按钮执行一个 cmd 脚本,然后 cmd 脚本执行一个 powershell 脚本。

为什么你问的 cmd 脚本?好吧,如果我单击按钮运行一个 powershell 脚本,我会遇到签名问题。

在 powershell 脚本的开头,我将执行策略设置为不受限制。如果我直接通过 powershell 运行脚本,这将完全改变执行策略并且脚本可以正常工作。如果我让用户单击按钮来运行 powershell 脚本,它会说我在签名时遇到问题,即使执行策略确实设置为不受限制!荒谬的。我发现在 cmd 脚本中设置执行策略解决了这个问题,这就是我在单击按钮时运行我的 powershell 脚本的方式。无论如何,这是一种解决方法,并且有效。

我现在的问题是我有一个 cmd 脚本,它调用 powershell 脚本来更改注册表项。这通过单击按钮再次完成。看起来不错,一切似乎都正常,但是键的值没有改变。现在,如果我只是在没有 Windows 窗体应用程序的情况下运行 cmd 脚本,键的值确实会改变。为什么会这样?

4

2 回答 2

3

我认为您的实际问题是“如何从 C# 调用 Powershell 脚本,并确保它以管理权限运行?”

答案是“模仿”:

于 2012-07-28T17:57:04.787 回答
0

使用automation.runspaces 命名空间给我带来了很多问题。我是一名学生,我在一所大学工作。我正在使用大学计算机和大学域。长话短说,我放弃了使用运行空间,我只是在 c# 中打开 powershell 并执行脚本。那没有用,所以我写了一些 cmd 脚本。这是一个有效的示例:

Powershell脚本:

重命名为 Mac 地址

$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

如果我在 powershell 中运行上面的脚本,它就可以工作。如果我使用 Process.Start(powershell.exe, "C:\myscript"); 在 c# 中它不会运行。即使设置执行策略也无济于事。所以我使用如下的cmd脚本:

cmd脚本:

powershell -noexit -executionpolicy unrestricted "C:\myscript.ps1"

它执行。

现在我有以下内容:

Powershell脚本:

Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -name AutoAdminLogon -value 0 write-host "Changing Registry" Start-Sleep -s 10

cmd脚本:

powershell -noexit -executionpolicy unrestricted "C:\Windows\ITS\ChangeRegistry.ps1"

在我的 Windows 窗体程序中,我有一个按钮单击事件调用 cmd 脚本。看起来它可以工作,没有任何崩溃,cmd按应有的方式执行,它写入主机,它休眠了10秒。但注册表项永远不会改变。但是我的第一个 powershell 重命名脚本和 cmd 示例只需单击 Windows 窗体上的按钮即可完美运行。所以我就是不明白。

于 2012-07-28T21:41:24.383 回答