Powershell通过SCCM问题部署

时间:2016-11-09 17:07:20

标签: powershell output sccm network-shares

我正在编写一个由SCCM通过软件包部署的PowerShell脚本。这样做的目的是删除具有特定名称的帐户,然后写入文件,说明该帐户是否存在。代码如下:

$Computer = hostname
foreach ($C in $Computer) {
    if (Test-Connection $C -Quiet) {
    Write-Verbose "$C > Online"
        $Users = Get-WMIObject Win32_UserAccount -Filter "LocalAccount=True" -ComputerName $C

        if ($Users.Name -contains 'test') {
            Add-Content \\SERVERNAME\SHARENAME.$\$computer-found_$(get-date -Format yyyymmdd_hhmmtt).txt "User 'test' found, Disable 'test' found"
            net user test /active:no            }
        else {
            Add-Content \\SERVERNAME\SHARENAME.$\$computer-notfound_$(get-date -Format yyyymmdd_hhmmtt).txt "User 'test' not found"
        }
    }
    else {
    Write-Verbose "$C > Offline"
    }
}

我还尝试将Write-Verbose替换为Write-Host,将Add-Content替换为Out-File,但我遇到的问题是,当我使用完整的网络时,不会创建任何内容/文件路径或分享例如\\SERVERNAME\SHARENAME.$标识的路径具有所有正确的权限,并使用系统帐户在本地运行。

我想查看在写入文件时是否发生了问题,因此写入C:\Temp\

时不会发生这种情况

有没有人有任何想法来解决这个问题。

2 个答案:

答案 0 :(得分:0)

我可能因为我的答案在技术上没有直接回答你的问题而被投票,但是,它试图指出你可能是一个更合乎逻辑的方向。如果我得罪任何人,我都会道歉,但现在是:

为什么不使用组策略禁用用户?如果您真的想知道用户在哪里被禁用,那么您可以使用硬件清单,但GP确实是实施此类设置的最佳方式。

答案 1 :(得分:0)

我不认为本地系统帐户可以访问网络资源。我不确定你是否配置过它。以及用于运行命令的命令

在这里,我在实验室测试后使用Configuration Manager部署发布了一种实现此方法的工作方式。

基本上我创建了一个包含源文件的包 enter image description here
并使用单个"运行命令行"创建了一个任务序列。步。 enter image description here
我使用任务序列的原因是因为我想使用帐户访问网络上的txt文件,我可以在任务序列中配置该文件。我不认为本地系统帐户有这样的权限。

脚本(DeactivateTest.ps1)我使用如下所示,就像你提供的那样,并在逻辑上稍作改动:

$Computer = hostname
foreach ($C in $Computer) {
    if (Test-Connection $C -Quiet) {
         Write-host "$C > Online"
         $Users = Get-WMIObject Win32_UserAccount -Filter "LocalAccount=True" -ComputerName $C
         $result=0
         Foreach($user in $Users){
             if ($User.Name -like '*test*') {
                 $username = $user.Name
                 "`n$(get-date -Format yyyymmdd_hhmmtt) User $username found ON $C, Disable 'test'" | Add-Content \\cas\resource\Result.txt
                 net user $username /active:no 
                 $result+=1
            }}

       if($result =0){
             "`n$(get-date -Format yyyymmdd_hhmmtt) User 'test' not found ON $C" | Add-Content  \\cas\resource\Result.txt}
             }

    else {
    "`n$C is Offline" | Add-Content \\cas\resource\Result.txt
    }
}
  • 脚本查询本地帐户并禁用具有单词"测试"在名字里。如果你不喜欢这个逻辑,你可以改变:)。
  • \\ cas \ resource \ Result.txt是网络共享上的txt文件。客户端会将结果写入此txt文件。
  • 任务序列中的命令是(它是x64机器):

    PowerShell.exe -ExecutionPolicy Bypass -File"。\ DeactiveTest.ps1"

输出如下:
enter image description here