2012-07-28 243 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的第一個例子完全適用於單擊窗體上的按鈕。所以我只是不明白。