您好!
在我们的环境中,出于安全原因,我们有单独的域管理员帐户。 我有一个powershell脚本来创建一个帐户并与aad同步,分配o365许可证等,这些应该作为域管理员运行。但是这个脚本中的html文件应该打印在非特权帐户的打印机上(不是远程;我使用相同的PC)
我有2个帐户:
admin@mydomain.com - 这是我的域管理员帐户
user@mydomain.com - 这是我的帐户,它在域中没有任何权限,我使用此帐户登录到电脑
脚本以 admin@mydomain.com 运行我需要将文件打印到 user@mydomain.com 默认打印机。
$print_body | Out-File "C:\temp\$name $surname.html"
$word = New-Object -comObject Word.Application
$word.documents.add("C:\temp\$name $surname.html") > $null
$word.PrintOut()
我想" C:\ temp \ $ name $ surname.html"要打印在我当前用户的( user@mydomain.com )默认打印机上。 现在,脚本将文件打印到 admin@mydomain.com 默认打印机(即#34;保存为PDF"),脚本会提示保存文件的位置。
这是我的第一个问题所以请原谅,如果它是愚蠢的或不清楚的。
答案 0 :(得分:0)
首先,我要感谢你们所有人,非常感谢你的帮助。
不幸的是,我无法使用任何评论来实现我的目标。下面的解决方案是一种解决方法,但我无法做得更好。
以下是我实现目标的方式:
由于脚本应该以 admin 运行,但我以用户身份登录,因此我创建了一个小脚本(脚本1),它将提示输入管理员凭据,运行另一个创建用户(脚本2)的脚本,一旦用户创建(脚本完成),就运行另一个打印HTML文件的脚本(脚本3)。所以这是运行脚本的脚本:)
下面的图片解释了逻辑。
脚本1正文:
do {
try{#prompt for credentials
$cred = Get-Credential -Message "Please provide your admin account details"
#start Script 2 with those credentials
$create_user = Start-Process powershell -Credential $username -ArgumentList "C:\temp\powershell\GUI.PS1" -PassThru
$correct = $true
}
catch{"Wrong Credentials"}
}until($correct -eq $true)
#wait for script 2 to finish
$create_user.WaitForExit()
#Start script 3 (Print HTML file).
Start-Process powershell -ArgumentList "C:\temp\powershell\Print_Welcome_Sheet.ps1" -NoNewWindow
脚本2正文超过600字符串所以我只会粘贴与此问题相关的部分:
$print_body | Out-File "C:\temp\Powershell\new_user.html"
脚本3正文:
#if html file exists - print it
if (test-path "C:\temp\Powershell\new_user.html") {
#Create new word application insance
$word = New-Object -comObject Word.Application
#load file
$word.documents.add("C:\temp\Powershell\new_user.html") > $null
#print file to default printer
$word.PrintOut()
#wait for 3 seconds and remove html file
Start-Sleep -Seconds 3
Remove-Item "C:\temp\Powershell\new_user.html"
}
#if file doesn't exist do nothing
else {}
这种方法是一种解决方法,但它完全符合我的要求。