web-dev-qa-db-ja.com

Windows8.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
mcbla

スクリプトに2つの潜在的な問題があります。

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

あなたの目標が正確に何であるかは私にはわかりません。これが、Windows8.1のスタート画面でタイルの混乱に対処する方法です。

  • 次の特性を持つSCCMアプリケーションを作成します:
    • インストーラーなし
    • 一般的なアプリのリストについてRemove-AppxPackageを呼び出すアンインストーラー
    • そのアプリのリストの検出スクリプト
  • 影響を受けるユーザーにアンインストールアクションを使用してアプリケーションをデプロイします。

私がこの戦略を使用するのは、将来、必要であることが判明した場合に、特定のユーザーがこれらのアプリのどれを利用できるかをより外科的に設定するためです。

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

アンインストール-Application.ps1

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

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

Detect-Application.ps1

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

これらすべてを実行すると、PowerShell検出スクリプトは、このような複雑な、外科的な、または型にはまらない検出に対して美しく機能します。

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