Windows 8.1 アプリを完全に削除するための SCCM 2012 経由で配信された Powershell スクリプト

Windows 8.1 アプリを完全に削除するための SCCM 2012 経由で配信された Powershell スクリプト

上記のタスクを実行するためのガイダンスを求めています。

私の Powershell スクリプトは以下のとおりです。このスクリプトは現在、特定の名前付きアプリを 1 つ削除します。

$AppsToDelete="*Microsoft.WindowsReadingList*"
 Foreach ($AppName in $AppsToDelete)
 {
     get-appxprovisionedpackage -online | where packagename -like $AppName | remove-appxprovisionedpackage -Online
     Get-AppxPackage -name $AppName -allusers | Remove-AppxPackage
 }

SCCM2012がスクリプトを実行するために使用するプログラムは次のとおりです。

PowerShell.exe -ExecutionPolicy UnRestricted -File .\delappsreadinglistonly.ps1

SCCM 2012 でプログラムを作成し、クライアントに展開しました。

プログラムはシステムではなくユーザーとして実行されるように設定されています。

EXECMGR.log ファイルには、スクリプトがクライアントによって受信され、正常に実行され、終了コード = 0、実行ステータスが成功であることが示されています。

とはいえ、リーディング リスト タイルは (Metro ?) スタート画面にまだ表示されており、リーディング リスト アプリは名前のアルファベット順のアプリ リストにまだ表示され、実行可能であり、C:\program files\windowsapps\ にさまざまなフォルダーがまだ存在しています。

ご指摘いただければ幸いです。

答え1

あなたのスクリプトには 2 つの潜在的な問題があるようです:

  1. 呼び出しには-AppxProvisionedPackageおそらく昇格が必要です。スクリプトをユーザーとして実行すると、例外がスローされる可能性があります。
  2. の呼び出しにはGet-AppxPackage -allusers管理者権限が必要です。 ドキュメント-allusers「このパラメータを使用するには、管理者権限を使用してコマンドを実行する必要があります。」と表示されます。

あなたの目標が何なのか、私にはよく分かりません。Windows 8.1 のスタート画面のタイルの乱雑さに対処する方法は次のとおりです。

  • 次の特性を持つ SCCM アプリケーションを作成します。
    • インストーラーなし
    • Remove-AppxPackage一般的なアプリのリストを要求するアンインストーラー
    • アプリリストの検出スクリプト
  • 影響を受けるアプリケーションにアンインストールアクションを適用して展開します。ユーザー

私がこの戦略を使用するのは、将来必要になった場合に、どのアプリを特定のユーザーに提供できるかをより正確に判断できるようにするためです。

このアプリケーションが削除のためにデプロイされているユーザーがログインすると、CcmExec最終的にアプリケーションが検出され、アンインストール コマンドが呼び出されます。アンインストール コマンドが呼び出されると、アプリケーションはユーザーに表示されなくなり、使用できなくなります。

アンインストール-アプリケーション.ps1

以下は私が使用しているアンインストールスクリプトの本体です。インストール(アンインストール)のために呼び出されるPowerShellスクリプトの設定方法には注意が必要です。終了コードをスクリプトから確実に取得するのは少し難しい

$appList =  'Microsoft.BingSports',
            # ...longlist of other apps...
            'Microsoft.WindowsReadingList'
Get-AppxPackage | 
    ? { $_.Name -in $appList } | 
    % { Remove-AppxPackage $_.PackageFullName }

検出アプリケーション.ps1

以下は私が使用する検出スクリプトの本体です。PowerShell 検出スクリプトの使用にはいくつかの落とし穴があることに注意してください。

これらすべてを実行すると、PowerShell 検出スクリプトは、このような複雑で精密な、または非標準的な検出に非常に有効に機能します。

    $appList =  'Microsoft.BingSports',
            # ...longlist of other apps...
            'Microsoft.WindowsReadingList'
    Get-AppxPackage | 
    ? { $_.Name -in $appList }

関連情報