我对Powershell相当陌生。 在这段代码中,我的同事遇到了一个我没有得到的错误。 我尝试了一些不同的操作(例如,将完整路径添加到powershell),但无法修复。 谁能告诉我怎么了?
Function Button4_Click()
{
$Filepathmmc = join-path -path $env:SystemRoot -ChildPath System32\Mmc.exe
$argumentlistdsa = join-path -path $env:SystemRoot -ChildPath System32\dsa.msc
$Credential = New-Object -TypeName System.Management.Automation.PsCredential -ArgumentList (Get-Content "$($env:userprofile)\username.txt"),(Get-Content "$($env:userprofile)\encrypt.txt" | ConvertTo-SecureString)
Start-Process powershell -Credential $Credential -ArgumentList "Start-Process -FilePath '$filepathmmc' -ArgumentList '$argumentlistdsa' -Verb RunAs"
}
我还尝试将其用作“开始过程”路径:
$aducpath = (Join-Path $Env:SystemRoot -ChildPath "\syswow64\WindowsPowerShell\v1.0\powershell.exe")
答案 0 :(得分:0)
我看到您仍在使用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”异常。