Одна проблема ведет к другой! Справка пользователя просто исправила одну проблему, которая привела к другой, когда я продолжил работу над этим сценарием. Мой сценарий выполняет проверку, чтобы увидеть, является ли текущий пользователь администратором, следующим образом:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = "& '" + $myinvocation.mycommand.definition + "'" + $loc
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
Аргументом для $ loc является параметр, который первоначально был передан через командный файл, а именно:
@setlocal enableextensions
@cd /d "%~dp0"
SET current="%~dp0
START /WAIT powershell.exe -ExecutionPolicy Bypass -File "JavaInstall.ps1" -loc %current%
В верхней части файла Powershell мы имеем:
param(
[string]$loc
)
Это работает в двух условиях:
1) Пользователь уже является Администратором.
2) Папка, из которой она запускается в любой точке обхода, не имеет пробела.
Когда он запускается из папки, такой как: C:\Users\User\Desktop\Java Test, он внезапно завершается ошибкой. Если я напишу Host-Host по пути, я увижу, что переменная $ loc верна до момента повышения. После того, как он поднимется, все, что после пространства потеряно. Если я запускаю это непосредственно как администратор, это, конечно, обходит повышение прав и работает даже с пробелами в папках, но я не хочу требовать сценария запуска правой кнопкой мыши. Есть идеи, что может быть причиной потери текста после пробела во время возвышения?