运行 PowerShell 脚本作为管理员,所有参数均为空
Running PowerShell script as Administrator all arguments are empty
我在下面以管理员身份尝试 运行 我的 PowerShell 脚本(名为 autoupdateWindows.ps1
)时遇到问题。我想要 move/rename 一些文件夹内容,例如 "Program Files (x86)",但我需要像我说的那样拥有管理员 PowerShell。
Param(
[string]$installDir,
[string]$appDir,
[string]$installDirName,
[string]$appDirName
)
#Elevate Powershell as admin it isn't
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")) {
$arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
break
}
Write-Output $installDir
Write-Output $appDir
Write-Output $installDirName
Write-Output $appDirName
Remove-Item -path $installDir$installDirName -recurse
Move-Item -path $appDir -destination $installDir
Rename-Item -path $installDir$appDirName -newname $installDirName
#Pause
if ($Host.Name -eq "ConsoleHost") {
Write-Host "Press any key to continue..."
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null
}
这是我在 PowerShell 中使用的命令行 window
powershell.exe -file .\autoupdateWindows.ps1 "c:\Program Files (x86)", "c:\users\dcommun\downloads", "installDir", "appDir"
所以当我使用它的时候,四个参数(arguments)都是空的。但是当我删除第一个 if
块以作为管理员启动 PowerShell 时,参数已正确填充。我只能通过这种方式(在脚本中)访问 "Program Files (x86)".
等文件夹
$MyInvocation.MyCommand.Definition
只是没有参数的脚本,因此在提升脚本时实际上省略了参数。将 $arguments
定义为脚本和其他参数的数组。
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]'Administrator')) {
$arguments = '-File', $MyInvocation.MyCommand.Definition,
$installDir, $appDir, $installDirName, $appDirName
Start-Process 'powershell.exe' -Verb RunAs -ArgumentList $arguments -NoNewWindow -Wait
exit $LastExitCode
}
我在下面以管理员身份尝试 运行 我的 PowerShell 脚本(名为 autoupdateWindows.ps1
)时遇到问题。我想要 move/rename 一些文件夹内容,例如 "Program Files (x86)",但我需要像我说的那样拥有管理员 PowerShell。
Param(
[string]$installDir,
[string]$appDir,
[string]$installDirName,
[string]$appDirName
)
#Elevate Powershell as admin it isn't
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")) {
$arguments = "& '" + $MyInvocation.MyCommand.Definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
break
}
Write-Output $installDir
Write-Output $appDir
Write-Output $installDirName
Write-Output $appDirName
Remove-Item -path $installDir$installDirName -recurse
Move-Item -path $appDir -destination $installDir
Rename-Item -path $installDir$appDirName -newname $installDirName
#Pause
if ($Host.Name -eq "ConsoleHost") {
Write-Host "Press any key to continue..."
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null
}
这是我在 PowerShell 中使用的命令行 window
powershell.exe -file .\autoupdateWindows.ps1 "c:\Program Files (x86)", "c:\users\dcommun\downloads", "installDir", "appDir"
所以当我使用它的时候,四个参数(arguments)都是空的。但是当我删除第一个 if
块以作为管理员启动 PowerShell 时,参数已正确填充。我只能通过这种方式(在脚本中)访问 "Program Files (x86)".
$MyInvocation.MyCommand.Definition
只是没有参数的脚本,因此在提升脚本时实际上省略了参数。将 $arguments
定义为脚本和其他参数的数组。
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]'Administrator')) {
$arguments = '-File', $MyInvocation.MyCommand.Definition,
$installDir, $appDir, $installDirName, $appDirName
Start-Process 'powershell.exe' -Verb RunAs -ArgumentList $arguments -NoNewWindow -Wait
exit $LastExitCode
}