4

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

不幸的是,这个脚本只有在以管理员身份运行时才能正常运行,因此我编写它的全部原因是没有实际意义的。有没有办法让我无需做任何事情就可以将其提升为管理员权限?

4

2 回答 2

12

您可以启动一个新的、提升的 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'   
于 2012-10-02T16:34:01.853 回答
5

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

打开任务计划程序并单击左侧窗格中的任务计划程序库。然后,右键单击任务计划程序库并选择创建任务(这应该会打开一个窗口)。为您的任务命名并检查是否选择了以最高权限运行。然后,单击“操作”选项卡并单击“新建”(这应该会打开一个窗口)。确认选定的操作是启动程序,然后单击浏览以选择批处理文件。在两个窗口上单击确定,您应该回到主任务计划程序窗口。您应该会在列表顶部看到新创建的任务,因此右键单击它并选择运行. 您应该看到您的 PowerShell 脚本以完全管理员权限运行,并且没有任何 UAC 提示。

现在,如果您想定期运行 PowerShell 脚本,您可以通过右键单击新创建的任务、选择Properties、单击Triggers选项卡并单击New 来自定义它。

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

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

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

就这些。

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

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

于 2020-07-26T07:06:05.103 回答