2012-10-02 65 views
0

我編寫了一個腳本,通過運行批處理文件,可以在通過Wi-Fi或有線Internet連接計算機之間進行切換。我寫這個是因爲我不喜歡每次輸入用戶名和密碼在兩者之間切換。以管理員身份運行PowerShell腳本,而無需輸入密碼

注:我必須啓用UAC,所以不幸的是關閉它不是一個選項。

它查看無線適配器的狀態。如果它當前已啓用,則會關閉無線適配器並啓用有線適配器。如果無線沒有啓用,它將啓用和禁用有線。這是代碼。

$adapter = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Where-Object {$_.ServiceName -ne "hamachi"} 
function wirelessOn 
{ 
    $wireless = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*Wireless*"} 
    $wireless.Disable() 
    $wired = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*gigabit*"} 
    $wired.Enable() 
} 

function wirelessOff 
{ 
    $wired = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*gigabit*"} 
    $wired.Disable() 
    $wireless = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*Wireless*"} 
    $wireless.Enable() 
} 

switch -wildcard ($adapter.description){ 
    "*wireless*" { 
     wirelessOn 
    } 
    "*gigabit*" { 
     wirelessOff 
    } 
} 

不幸的是,這個腳本只有正常運行,如果以管理員身份運行,因此整個原因,我寫的是沒有實際意義。有沒有辦法讓我可以提升管理員權限而無需執行任何操作?

+0

實際上,你問如何運行,而不必應付UAC提升的腳本。這完全否定了UAC的全部觀點。如果你能做到這一點,這將是UAC的嚴重漏洞,你不覺得嗎? – x0n

+0

我不這麼認爲。因爲我知道可以通過文本文件或硬編碼將憑據傳遞給UAC。我知道這是可能的,因爲我相當確定的服務器一直在等待系統管理員登錄並單擊「是」 – mhopkins321

回答

5

你可以開始一個新的,高架PowerShell進程運行腳本如:

Start-Process PowerShell -verb runas -ArgumentList '-noexit','-File','path-to-script' 

如果你不想PowerShell窗口流連然後擺脫'-noexit'的,但對於調試推出你的腳本,它很有用。

如果你有機會訪問管理員帳戶的用戶名/密碼,你可以這樣做:

# Capture encrypted password once and store to file 
$passwd = Read-Host "Enter password" -AsSecureString 
$encpwd = ConvertFrom-SecureString $passwd 
$encpwd > $path\password.bin 

# Afterwards always use this to start the script 
$encpwd = Get-Content $path\password.bin 
$passwd = ConvertTo-SecureString $encpwd 
$cred = new-object System.Management.Automation.PSCredential 'domain\username',$passwd 
Start-Process PowerShell -Cred $cred -ArgumentList '-noexit','-File','path-to-script' 
+0

當我這樣做時,我仍然得到UAC – mhopkins321

+1

典型的UAC配置是提示「允許」程序運行。當您的用戶帳戶是管理員的成員,但使用標準用戶令牌運行時會發生這種情況。這聽起來像你實際上在一個標準的用戶帳戶下運行?如果是這樣,你知道一個管理員用戶名/密碼?在這種情況下,您可以將憑據傳遞給Start-Process cmdlet。還有一些方法可以將密碼安全地存儲在DPAPI中,然後在腳本中檢索它,這樣就不必提示您提供密碼。 –

+0

我無權訪問「管理員」帳戶。如果我輸入我的憑證,它確實有效。我將如何自動通過我的? – mhopkins321

相關問題