簡體   English   中英

以管理員身份運行 PowerShell 腳本而不輸入密碼

[英]Running a PowerShell script as administrator without typing in passwords

我編寫了一個腳本,它可以通過運行批處理文件在通過 Wi-Fi 或有線 Internet 連接計算機之間進行切換。 我寫這個是因為我不喜歡每次都必須輸入我的用戶名和密碼來在兩者之間切換。

注意:我必須啟用 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
    }
}

不幸的是,這個腳本只有在以管理員身份運行時才能正常運行,因此我編寫它的全部原因是沒有實際意義的。 有什么方法可以讓我無需做任何事情就可以提升到管理員權限?

您可以啟動一個新的、提升的 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'   

您可以通過使用批處理 (.bat) 文件和任務計划程序來執行此操作。

首先,您必須在與 PowerShell .ps1 文件相同的文件夾中創建一個批處理文件(您可以使用記事本),其中包含以下內容:

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%PutTheNameOfYourPowerShellScriptHere.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PowerShellScriptPath%""' -Verb RunAs}";

打開任務計划程序並單擊左窗格中的任務計划程序庫 然后,右鍵單擊任務計划程序庫並選擇創建任務(這應該會打開一個窗口)。 為您的任務命名並檢查是否選擇了以最高權限運行 然后,單擊“操作”選項卡並單擊“新建” (這應該會打開一個窗口)。 驗證所選操作是否為啟動程序,然后單擊瀏覽以選擇批處理文件。 在兩個窗口上單擊確定,您應該回到主任務計划程序窗口。 您應該會在列表頂部看到新創建的任務,因此右鍵單擊它並選擇Run 您應該看到您的 PowerShell 腳本以完整的管理員權限運行,並且沒有任何 UAC 提示。

現在,如果您想定期運行 PowerShell 腳本,您可以通過右鍵單擊新創建的任務,選擇Properties ,單擊Triggers選項卡並單擊New 來自定義它

但是,如果您希望通過雙擊快捷方式文件來運行 PowerShell 腳本,則必須執行一些額外的步驟。 右鍵單擊您的桌面並選擇新建 > 快捷方式並輸入以下位置:

C:\Windows\System32\schtasks.exe /run /tn "PutTheNameOfYourNewlyCreatedTaskHere"

單擊下一步,為您的快捷方式命名並單擊完成 您應該嘗試打開快捷方式,看看您的 PowerShell 腳本是否按您的意願運行。

就這些。

獎勵:如果您想通過按一個鍵或組合鍵來運行您的 PowerShell 腳本,您還可以右鍵單擊您的快捷方式並在“快捷鍵:”字段中輸入您想要的內容。 但是,如果它不允許您輸入特定的鍵或組合鍵,您還可以安裝 Microsoft 的PowerToys並使用其鍵盤管理器實用程序重新映射鍵或組合鍵。 例如。 您可以在快捷鍵:字段中輸入F8 ,然后將其重新映射到您很少使用的鍵,例如大多數鍵盤上的計算器鍵。

如果您在遵循本指南時遇到任何問題,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM