powershell打印到其他用户的默认打印机

时间:2017-12-08 14:49:36

标签: powershell printing active-directory

您好!

在我们的环境中,出于安全原因,我们有单独的域管理员帐户。 我有一个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"),脚本会提示保存文件的位置。

这是我的第一个问题所以请原谅,如果它是愚蠢的或不清楚的。

1 个答案:

答案 0 :(得分:0)

首先,我要感谢你们所有人,非常感谢你的帮助。

不幸的是,我无法使用任何评论来实现我的目标。下面的解决方案是一种解决方法,但我无法做得更好。

以下是我实现目标的方式:

由于脚本应该以 admin 运行,但我以用户身份登录,因此我创建了一个小脚本(脚本1),它将提示输入管理员凭据,运行另一个创建用户(脚本2)的脚本,一旦用户创建(脚本完成),就运行另一个打印HTML文件的脚本(脚本3)。所以这是运行脚本的脚本:)

下面的图片解释了逻辑。

enter image description here

脚本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 {}

这种方法是一种解决方法,但它完全符合我的要求。