Я вижу, что вы все еще используете join-path, вы пытались использовать абсолютный путь для устранения неполадок?
Я также вижу, что вы читаете пароль из текстового файла.Я бы посоветовал вам не делать этого, и вместо этого, возможно, пользователи будут входить в систему сами, а не для повышения прав.Если вы замените $Credential
в процессе вызова на (Get-Credential)
, он запросит у пользователя повышение прав.Вы также можете использовать $Credential = Get-Credential
, чтобы сохранить его на будущее.
Я не могу воспроизвести ошибку, которую вы получаете, только с этим фрагментом кода.Все ваши пути соединения нормальны и, кажется, указывают на ожидаемое место.При запуске от имени непривилегированного пользователя я получаю приглашение UAC, а не неверный код.Если на самом деле есть проблема с тем, где что находится, могу ли я предложить вам использовать что-то подобное для поиска того, что вам нужно?
Function Button4_Click()
{
$Filepathmmc = (Get-ChildItem -Recurse -Path $env:SystemRoot -Filter "Mmc.exe").FullName | Select-Object -First 1
$argumentlistdsa = (Get-ChildItem -Recurse -Path $env:SystemRoot -Filter "dsa.mmc").FullName | Select-Object -First 1
Start-Process powershell -Credential (Get-Credential) -ArgumentList "Start-Process -FilePath '$filepathmmc' -ArgumentList '$argumentlistdsa' -Verb RunAs"
}
Это не идеально, но оно всегда будет возвращать экземпляр mmc.Вы можете добавить -ErrorAction SilentlyContinue
к команде Get-ChildItem, чтобы подавить неизбежные исключения «Доступ к пути X запрещен».