У меня проблема при попытке запустить мой скрипт PowerShell (с именем autoupdateWindows.ps1
) в качестве администратора ниже. Я хочу переместить / переименовать содержимое некоторых папок, например «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
powershell.exe -file .\autoupdateWindows.ps1 "c:\Program Files (x86)", "c:\users\dcommun\downloads", "installDir", "appDir"
Поэтому, когда я его использую, все четыре параметра (аргументы) пусты. Но когда я удаляю первый блок if
, чтобы запустить PowerShell от имени администратора, параметры заполняются правильно. Я могу сделать это только таким образом (в скрипте), чтобы иметь доступ к папкам типа «Program Files (x86)».