0

パッケージを介して 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-HostAdd-ContentOut-File\\SERVERNAME\SHARENAME.$

ファイルをローカルに書き込むときに問題が発生したかどうかを確認したかったため、書き込み時にこれは発生しませんC:\Temp\

これを解決するためのアイデアはありますか。

4

2 に答える 2

0

ローカル システム アカウントがネットワーク リソースにアクセスできるとは思えません。設定したことがあるかどうかはわかりません。そして、コマンドを実行するために使用したコマンドは何ですか

ここでは、ラボでテストした後、Configuration Manager の展開を使用してこれを行う実際の方法を投稿します。

基本的に、ソース ファイル を含むパッケージを作成し、単一の「コマンド ラインの実行」ステップでタスク シーケンスを作成しました。 タスク シーケンスを使用する理由は、タスク シーケンス内で構成できるネットワーク上の 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
    }
}
  • スクリプトは、ローカル アカウントにクエリを実行し、名前に「Test」という単語が含まれるアカウントを無効にします。このロジックが気に入らない場合は、変更できます:)。
  • \\cas\resource\Result.txt は、ネットワーク共有上の txt ファイルです。クライアントは結果をこの txt ファイルに書き込みます。
  • タスク シーケンスのコマンドは次のとおりです (x64 マシンです)。

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

出力は次のようになります。
ここに画像の説明を入力

于 2016-11-11T10:34:11.673 に答える