gpt4 book ai didi

powershell - 以管理员身份重新启动脚本并保留开关和字符串参数

转载 作者:行者123 更新时间:2023-12-02 03:10:54 26 4
gpt4 key购买 nike

我正在编写一个使用参数/参数的 PowerShell 脚本,需要以管理员身份运行,但我试图使其尽可能用户友好,所以我尝试编写它,以便如果它不是'如果以管理员身份运行,那么它可以自动提升自身保留原始参数(仅开关和字符串)。

我无法在线找到解决方案,因此发表了这篇文章。

最佳答案

我设法通过“字符串化”$PsBoundParameters,然后将其与 Start-Process PowerShell -Verb Runas -ArgumentList 一起使用来实现此目的。

注意:$PsBoundParameters 使用当前作用域的参数(例如“root”与函数内部),因此如果您需要引用命令行参数(就像我一样),那么您需要在函数外部使用此变量,或者首先将该变量传递给函数(就像我在这里所做的那样)。

我已经创建了一个演示:

Param(
[switch]$ExampleSwitch,
[string]$ExampleString
)

Function Restart ($AllParameters, $Admin) {
$AllParameters_String = "";
ForEach ($Parameter in $AllParameters.GetEnumerator()){
$Parameter_Key = $Parameter.Key;
$Parameter_Value = $Parameter.Value;
$Parameter_Value_Type = $Parameter_Value.GetType().Name;

If ($Parameter_Value_Type -Eq "SwitchParameter"){
$AllParameters_String += " -$Parameter_Key";
} Else {
$AllParameters_String += " -$Parameter_Key $Parameter_Value";
}
}

$Arguments = "-File `"" + $PSCommandPath + "`" -NoExit" + $AllParameters_String;

If ($Admin -Eq $True){
Start-Process PowerShell -Verb Runas -ArgumentList $Arguments;
} Else {
Start-Process PowerShell -ArgumentList $Arguments;
}
}

$RanAsAdministrator = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator);

Write-Host "ExampleSwitch value:" $ExampleSwitch;
Write-Host "ExampleString value:" $ExampleString;
Write-Host "";

If ($RanAsAdministrator -Eq $True){
Write-Host "Running as administrator: Yes.";
} Else {
Write-Host "Running as administrator: No.";
}

$Elevate = Read-Host "Restart as current user or admin? (u/a)";
Write-Host "";

If ($Elevate -Like "u"){
Restart $PsBoundParameters;
} ElseIf ($Elevate -Like "a") {
Restart $PsBoundParameters -Admin $True;
}

Start-Sleep -Seconds 9999;

关于powershell - 以管理员身份重新启动脚本并保留开关和字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com