Windowsストアユニバーサルアプリケーション削除スクリプト

システム管理者向けに別のスクリプトをビンから配置する時が来ました。 サービスパックシステムコンポーネントを使用するための準備は、以前の記事で説明しました。 今日は、変更なしで作業に適用できる既製のソリューションを共有します。 ご存知のように、MicrosoftはGoogleの例に従うことに決め、 Windows Storeと呼ばれる独自のアプリケーション市場を開きました。 Windows 8以降、OSディストリビューションでは、ユニバーサルですべてのWindowsデバイスで実行される新しいタイプのアプリケーション(配布ファイル形式-AppX )が導入されました。 プレインストールされたユニバーサルアプリケーションの中で、私は個人的に有用なものを見つけられなかったため、それらをすべて削除するスクリプトを作成しました。



ここで紹介するソリューションは、Windows 8、8.1、10のイメージを処理するためのもので、 * .wim形式のスタンドアロンイメージファイルと、展開(インストール)システムの両方に適用できます。 以前のスクリプトと同様に、 DISMシステムツールを使用します。 ただし、開発中にdismコマンドを使用すると、インストールされたシステムからユニバーサルアプリケーションを削除する方法なく(オンライン保守)、 PowerShellを使用するしかありませんでした。 私は選択をしなければなりませんでした:PSでスクリプトを完全に記述するか、シェルの機能(CMD)を使用するか、PSから個々の操作を呼び出します。 2番目のオプションを選択したため、提示されるソリューションは2つのファイルで構成されています。メインスクリプト(任意の名前* .cmdで保存)と追加のファイル(名前RemoveAppxes.ps1で保存)です。



メインスクリプト



@echo off title Deleting Appxes in Windows image set _file=install.wim set _img=Online set _mnt=mount dism /English /LogLevel:1 /Get-Help | find "Version: 6.1" > nul && exit :pre_menu cls if not exist %_file% goto :version dism /English /LogLevel:1 /Get-ImageInfo /ImageFile:%_file% echo ------------------------------------------------------------------------------- if %ERRORLEVEL% NEQ 0 pause & exit set /p _ind=Input index or press [Enter] for quit: || exit if %_ind% EQU 0 goto :version if %_ind% GTR 0 if %_ind% LEQ 24 goto :ind_menu goto :pre_menu :ind_menu cls dism /English /LogLevel:1 /Get-ImageInfo /ImageFile:%_file% /Index:%_ind% echo ------------------------------------------------------------------------------- if %ERRORLEVEL% NEQ 0 pause & goto :pre_menu choice /c abcdefghijklmnopqrstuvwxyz /n /m "Mount selected image? [m] " if %ERRORLEVEL% EQU 13 goto :mount goto :pre_menu :version dism /%_img% /English /LogLevel:1 /Get-Help | find "Image Version: 6.1" > nul && goto :unmount goto :remove :remove cls echo Getting list of Appxes. Please wait... dism /%_img% /English /LogLevel:1 /Get-ProvisionedAppxPackages > %TEMP%\appxes.txt echo ------------------------------------------------------------------------------- set _num=1 for /f "skip=8 tokens=3" %%a in (%TEMP%\appxes.txt) do call :filter %%a del %TEMP%\appxes.txt echo Removes default application associations dism /%_img% /English /LogLevel:1 /Remove-DefaultAppAssociations echo ------------------------------------------------------------------------------- if %_img%==Online ( echo Remove current Appxes for AllUsers powershell -Command Start-Process powershell -ArgumentList '-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File RemoveAppxes.ps1' -Verb RunAs ) if not exist %_file% exit goto :unmount :filter echo %1 | findstr /ric:"Microsoft.*" > nul if %ERRORLEVEL% EQU 0 call :action %1 exit /b :action echo %1 | findstr /ric:"Microsoft.*_" > nul if %ERRORLEVEL% NEQ 0 ( set /a _num+=1 echo %_num% Remove: %1 ) else ( dism /%_img% /English /LogLevel:1 /Remove-ProvisionedAppxPackage /PackageName:%1 echo ------------------------------------------------------------------------------- ) exit /b :mount cls md %_mnt% dism /English /LogLevel:1 /Mount-Image /ImageFile:%_file% /Index:%_ind% /MountDir:%_mnt% if %ERRORLEVEL% NEQ 0 rd %_mnt% & pause & exit set _img=Image:%_mnt% goto :version :unmount cls if not %_img%==Online ( dism /English /LogLevel:1 /Unmount-Image /MountDir:%_mnt% /Commit rd %_mnt% ) set _img=Online goto :pre_menu
      
      





追加のスクリプト



 Get-AppxPackage -AllUsers | Remove-AppxPackage
      
      





使用する



2つのファイルを1つのフォルダーに配置する必要があります。 スタートアップフォルダー-install.wimにイメージファイルがない場合、スクリプトは完全自動モードで動作します。 スタートアップフォルダー-install.wimにイメージファイルがある場合、スクリプトはそこから既存の「インデックス」に関する情報を読み取り、番号の入力を求めます。 その後、選択した「インデックス」に関する拡張情報が表示され、マウント要求が発行されます。 いずれかのキーを押すと戻り、[m]キーを押すと、次の一連のアクションが開始されます。イメージのマウント、OSバージョンの確認、アプリケーション配布の削除(ループ)、すべての関連付けの削除、インストール済みアプリケーションのアンインストール(オンライン開始時)、イメージのアンマウント、戻る「インデックス」選択メニューで。 その後、画像の別の「インデックス」を選択して、アプリケーションを削除できます。 番号0の「インデックス」を選択すると、オンラインサービスが開始されます。



コード解析



最初に、 setコマンドは変数を設定します。 install.wimイメージファイルの推定名を変更できます (たとえば、 install.esdに )。 マウントフォルダーの名前(既定ではマウント)を変更するか、マウントフォルダーをスタートアップフォルダーの外に置く必要がある場合はパスを指定できます。


:pre_menu



アドバンスメニュー。 エラー制御を使用したwimファイルに関する基本情報の取得。 画像ファイルがない場合は、オンラインモードで起動します。


:ind_menu



インデックスメニュー。 エラー制御付きのwimファイルで選択された「インデックス」に関する拡張情報を取得します。 「インデックス」をマウントする提案。


:バージョン



ターゲットシステムのバージョンを確認します。 スクリプトをWindows 7イメージに適用しようとしていることが判明した場合、アンマウントが発生します。 それ以外の場合は、次のラベルに移動します。



:削除(:フィルター、:アクション)



メインスクリプト実行ユニット。 最初に、一時ファイルappxes.txtに保存する統合ユニバーサルアプリケーションのリストが要求されます。 次に、 forループで、リストから行が順番に選択され、疑似関数filterに渡されます 。 行は、正規表現「Microsoft。*」による検索によってフィルタリングされます -見つかった場合、次の擬似関数に渡されます:action 。 ここでは、正規表現「Microsoft。* _」は、将来削除するためにdismユーティリティに渡されるユニバーサルアプリケーションの名前を除外します。 作業のロジックをよりよく理解するには、 appxes.txtファイルの内容を確認する必要があります。 ファイルはサイクルの最後に削除されるため、ファイルに慣れるには、まず手動で取得して保存する必要があります。



1つのコマンドで、ユニバーサルアプリケーションによって個々のファイルを開く関連付けがすべて削除されます。 一般的なファイルの種類については、標準のクラシックWindowsアプリケーションとの関連付けが残ります。



インストールされたシステムからユニバーサルアプリケーションをアンインストール(アンインストール)するには、PowerShellスクリプト言語で複合コマンドを呼び出します。 追加スクリプトRemoveAppxes.ps1のファイルは、最初にすべてのユーザーのすべてのユニバーサルアプリケーションのリストに対する要求を実行し、次に「パイプライン」がそれらをdeleteコマンドに渡します。 複雑なことはないように見えますが、この操作を実行するには、PSスクリプトを昇格した権限で実行する必要があり、管理者に代わって作業するだけでは不十分です。 正常に起動するには、 powershellコマンドにその複雑なコードを挿入して、昇格した特権を取得する必要があります。 簡単な保護! この「ばかげた」ために、PowerShellは好きではありませんでした。



:マウント



イメージをマウントします。 マウントフォルダは事前に作成されています。 エラー制御。 イメージの仕様を定義する変数が変更され、オフラインイメージへのパスを指すようになりました。


:マウント解除



イメージをアンマウントします。 オンライン保守(/オンライン)を実行した場合、マウントを解除する必要はありません。 変数を元の値に戻す。


おわりに



Windowsストアアプリをアンインストールする簡単で迅速な方法を示しました。 同じアプリケーションをモバイルデバイスとPCで同じように使用することはできないと思います。 まず、これらのプラットフォームには異なる機能目的があるため、ユーザーが必要とするアプリケーションは異なる機能を提供する必要があります。 スクリプトを実行した後、いくつかのユニバーサルアプリケーションがまだ残っています。まず、それはWindowsストア自体であり、削除されたものなどをインストールできます。



All Articles