我要求用户运行具有管理员权限的脚本。所以我创建了2个脚本,其中用户运行第一个脚本,该脚本将使用带有管理员凭据的start-process调用第二个脚本。我将当前登录的用户ID和用户配置文件从第一个脚本传递到第二个脚本作为参数,以便在第二个脚本中使用它们。但是一切都很好但是在第二个脚本中使用变量访问路径时访问用户文档文件夹时出错。
第一个脚本如下。
$currentusername = $env:USERNAME
$currentuserprofile = $env:USERPROFILE
$adminusername = "domain\admin"
$adminPassword = 'pwd' | ConvertTo-SecureString -Force -AsPlainText
$credential = New-Object
System.Management.Automation.PsCredential($adminusername, $adminPassword)
$scriptpath = "path to second script.ps1"
Start-Process -filepath PowerShell.exe -Credential $credential -argumentlist "-noexit", "-executionpolicy bypass","-file $scriptpath",$currentusername,$currentuserprofile
第二个Script.ps1
param (
#$currentusername = $args[3],
$currentuserprofile = $args[5]
)
$UserDir = "$currentuserprofile\Documents\"
Test-Path $UserDir
这个测试路径$ UserDir给出了错误。 任何人都可以解决这个问题或帮我解决这个问题吗?
答案 0 :(得分:1)
当您将参数传递给powershell.exe以及-file
时,只有参数 AFTER 将文件路径传递给脚本。 Reference
从技术上讲,在你的第二个脚本中,你只有以下参数:
$args[0] # $currentusername
$args[1] # $currentuserprofile
话虽如此,通常你不会同时使用$ args和param。它是一个或另一个。
你可以这样做:
$currentusername = $args[0]
$currentuserprofile = $args[1]
$UserDir = "$currentuserprofile\Documents\"
Test-Path $UserDir
OR
param (
$currentusername,
$currentuserprofile
)
$UserDir = "$currentuserprofile\Documents\"
Test-Path $UserDir
答案 1 :(得分:-1)
即使您正在传递管理员用户凭据,默认情况下,该进程也不会使用提升的权限启动,请在启动过程中添加-verb RunAs以实现此目的。