以管理员身份运行PowerShell脚本而无需键入密码

时间:2012-10-02 15:24:07

标签: powershell uac

我编写了一个脚本,只需运行批处理文件即可在通过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
    }
}

不幸的是,如果以管理员身份运行,此脚本只能正常运行,因此我编写它的全部原因都没有实际意义。有没有办法让我可以提升管理员权限,而无需我做任何事情?

2 个答案:

答案 0 :(得分: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'   

答案 1 :(得分:2)

您可以通过使用批处理(.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}";

打开Task Scheduler,然后在左侧窗格中单击 Task Scheduler库。然后,右键单击任务计划程序库,然后选择创建任务(这将打开一个窗口)。给您的任务起一个名字,并检查以最高特权运行。然后,点击操作标签,然后点击新建(这将打开一个窗口)。确认所选的操作是启动程序,然后单击浏览以选择批处理文件。在两个窗口中单击确定,您应该回到Task Scheduler主窗口。您应该在列表顶部看到新创建的任务,因此右键单击它,然后选择运行。您应该看到PowerShell脚本在运行时具有完整的管理员权限,并且没有任何UAC提示。

现在,如果要定期运行PowerShell脚本,则可以通过右键单击新创建的任务,选择属性,单击触发器来自定义该脚本。 strong>标签,然后点击新建

但是,如果您希望通过双击快捷方式文件来运行PowerShell脚本,则必须执行一些附加步骤。右键点击您的桌面,然后选择新建>快捷方式,然后输入以下位置:

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

点击下一步,为您的快捷方式命名,然后点击完成。您应该尝试打开快捷方式,然后查看您的PowerShell脚本是否按需运行。

仅此而已。

奖金:如果您想通过按某个键或组合键来运行PowerShell脚本,则还可以右键单击您的快捷方式,然后在快捷键:字段中输入所需的内容。但是,如果不允许您输入特定的键或组合键,则还可以安装Microsoft的 PowerToys ,并使用其键盘管理器实用程序重新映射键或组合键。例如。您可以在快捷键:字段中输入 F8 ,然后将其重新映射到您很少使用的键,例如大多数键盘上的Calculator键。

在遵循本指南时,如果您有任何问题,请告诉我。