2012-07-28 125 views
0

我有几个问题。这是它的工作原理。在窗体上,用户点击按钮。该按钮执行cmd脚本,然后cmd脚本执行powershell脚本。通过c运行powershell脚本#

为什么你问的cmd脚本?好吧,如果我点击按钮运行powershell脚本,我在签名时遇到了问题。

在PowerShell脚本的开头,我将执行策略设置为不受限制。如果我直接通过powershell运行脚本,这会更好地执行策略并且脚本可以正常工作。如果我有用户单击按钮来运行powershell脚本,它说我签署有问题,即使执行策略已设置为无限制!荒谬。我发现在cmd脚本中设置执行策略解决了这个问题,这就是我通过点击一个按钮来运行我的powershell脚本的方式。无论如何,这是一个解决方案,它的工作原理。

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

回答

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不受限制的 “C:\ myscript.ps1”

并执行。

现在我有以下几点:

PowerShell脚本:

的Set-ItemProperty “HKLM:\ SOFTWARE \微软\的Windows NT \ CURRENTVERSION \ Winlogon中” -name AutoAdminLogon - 值0 写 - 主机“更改注册表” 启动睡眠-s 10

CMD脚本:

PowerShell的-noexit -ExecutionPolicy不受限制的 “C:\ WINDOWS \ ITS \ ChangeRegistry.ps1”

在我的Windows窗体程序中我有一个按钮单击事件调用cmd脚本。它看起来像它的工作,没有崩溃,cmd执行,因为它应该写入主机,它睡了10秒。但注册表项从不改变。但我的PowerShell重命名脚本和cmd的第一个例子完全适用于单击窗体上的按钮。所以我只是不明白。