0

ネットワーク内の複数のクライアントで特定のソフトウェアをアンインストールするのに役立つスクリプトを探しています。

現在、リストを確認し、リモートでクライアントにアクセスし、管理者アカウントでサインインし、ソフトウェアをアンインストールしてからログアウトしてプロセスを繰り返しています。これはすべて手動で行うため、これらのことを行う PowerShell スクリプトを作成するのを手伝ってもらいたいです。

発生する可能性のある問題: クライアントへの接続を確立できないため、リモートでログインできません。別のユーザーがすでにクライアントにログインしている可能性があります。アンインストールしようとしているソフトウェアは、私の知らないうちに既にアンインストールされています。

クライアント数は約 900 であるため、スクリプトが非常に役立ちます。

また、スクリプトの終了後に、ソフトウェアがアンインストールされたクライアントとアンインストールされなかったクライアントのリストを取得できれば、すばらしいことです。

4

1 に答える 1

1

このように書かれた質問は、「何を試しましたか」タイプの回答を引き出す可能性があります...

Windows Installer Powershell Module Uninstall-MSIProductを使用することをお勧めします。

このモジュールをリモートで使用する方法については、この投稿で説明しました: get-msiproductinfo を使用したリモート PC。この例ではGet-MSIProductInfoを使用していますが、 Uninstall-MSIProductを使用するように簡単に更新できます。

これをUninstall-MSIProductを使用するように簡単に変更しましたが、テストしていません。

[cmdletbinding()]
param
(
    [parameter(Mandatory=$true,ValueFromPipeLine=$true,ValueFromPipelineByPropertyName=$true)]
    [string]
    $computerName,
    [string]
    $productCode
)

begin
{
    write-verbose "Starting: $($MyInvocation.MyCommand)"

    $scriptFolder   = Split-Path -Parent $MyInvocation.MyCommand.Path
    $moduleName     = "MSI"
    $modulePath     = Join-Path -Path $scriptFolder -ChildPath $moduleName  

    $remoteScript   = {
        param($targetPath,$productCode)

        Import-Module $targetPath
        uninstall-msiproduct -ProductCode $productCode
    }

    $delayedDelete  = {
        param($path)
        Remove-Item -Path $path -Force -Recurse
    }
}
process
{
    $remotePath = "\\$computerName\c$\temp\$moduleName"

    write-verbose "Copying module to $remotePath"
    Copy-Item -Path $modulePath -Destination $remotePath -Recurse -Container -Force

    write-verbose "Getting installed products"
    Invoke-Command -ComputerName $computerName -ScriptBlock $remoteScript -ArgumentList "c:\temp\$moduleName", $productCode

    write-verbose "Starting job to delete $remotePath"
    Start-Job -ScriptBlock $delayedDelete -ArgumentList $remotePath | Out-Null
}

end
{
    write-verbose "Complete: $($MyInvocation.MyCommand)"
}
于 2013-11-15T10:33:55.387 に答える