質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

5679閲覧

最終ログインからn日経過したユーザープロファイルの削除

youyou1982

総合スコア1

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2022/01/07 05:31

前提・実現したいこと

Windowsの最終ログインからn日(今回は30日)経過したユーザープロファイルを
削除したいと考えています。

<条件>
・SYSTEM 等の特別なアカウント以外
・LastUseTime の項目が (Get-Date).AddDays(-30) よりも前の日時

下記を実行しましたが、すぐに終わってしまい何も処理がされず、古いプロファイルも削除されませんでした。

該当のソースコード

Get-CIMInstance win32_userProfile | Where {(!$_.Special) -and (!$_.Loaded) -and (($_.LastUseTime) -lt (Get-Date).AddDays(-30))} | Remove-CimInstance

試したこと

類似質問のhttps://teratail.com/questions/129777を参照しました。
正しいコードは

Get-CIMInstance win32_userProfile | Where {(!$_.Special) -and (!$_.Loaded) -and (($_.LastUseTime) -lt (Get-Date).Date.AddDays(-30))} | Remove-CimInstance

になるのでしょうか?
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

最終的にはこのPowerShellスクリプトをMicrosoft エンドポイントマネージャにて
AzureADに参加済みのPCに配信してユーザープロファイルの削除を行いたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、落ち着いて原因をつきとめましょう。

■原因を探す手順 スタートボタン → W の Windows PowerShellフォルダ → Windows PowerShell(右クリック)→ 管理者として実行 まず、PowerShellの画面を表示します。 ■1回目 Get-CIMInstance win32_userProfile | Where {(!$_.Special)} ← 画面に貼り付けてリターンキーを押す 何か、表示されましたか? 表示があるなら、 cls ← コマンドを、画面に貼り付けてからリターンキーを押す ■2回目 Get-CIMInstance win32_userProfile | Where {(!$_.Special) -and (!$_.Loaded)} ← 画面に貼り付けてリターンキーを押す 何か、表示されましたか? 表示があるなら、 cls ← コマンドを、画面に貼り付けてからリターンキーを押す ■3回目 Get-CIMInstance win32_userProfile | Where {(!$_.Special) -and (!$_.Loaded) -and (($_.LastUseTime) -lt $((Get-Date).Date.AddDays(-30)))} ← 画面に貼り付けてリターンキーを押す 何か、表示されましたか? 表示があるなら、 cls ← コマンドを、画面に貼り付けてからリターンキーを押す ■4回目 Get-CIMInstance win32_userProfile | Where {(!$_.Special) -and (!$_.Loaded) -and (($_.LastUseTime) -lt $((Get-Date).Date.AddDays(-30)))} | Remove-CimInstance ← 画面に貼り付けてリターンキーを押す ■ ■ ■ 何も表示が出なかったものが原因。または、存在していない。 ■ ■

投稿2022/01/08 12:05

ccc-

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

youyou1982

2022/01/11 03:40

ccc-様 ご回答ありがとうございます。2回目のチェックまでは情報が表示されました。 明日、Date.AddDays(-30)の値を-1に変更して3回目以降のチェックを行ってみたいと思います。
ccc-

2022/01/13 00:07

お返事が遅くなりまして申し訳ございません。 メンテナンス後にお返事しています。 手順について、ご覧いただきまして誠に有り難うございます。 お役に立ててとても嬉しいです。 あと、原因が分からず、困っている人が大勢います。 ログインしてベストアンサーボタンをクリックするなら、 困っている人が見つけやすくなり、助ける事ができます。 前もって、ご協力に感謝します。 ありがとうございます。
youyou1982

2022/01/13 02:19

ccc-様 Date.AddDays(-30)の値を-1に変更してみましたが、やはり3回目のチェックでは情報が表示されませんでした。 削除したいプロファイルについて、3日前が最終ログインにも関わらず、LastUseTimeがPC起動時の日時に更新されていることが原因と考えられるのですが、なぜログインしていないのにLastUseTimeが更新されるかがわかりません…。PowerSell実行は別のアカウントで行い、1日の最後にはすべてのユーザーからサインアウトされていることを確認してシャットダウンを行っています。
ccc-

2022/01/13 03:27

お返事有り難うございます。 LastUseTimeの更新について、以下のコメントがありました。 [古いユーザプロファイルを削除したい](https://teratail.com/questions/129777) を下の方へスクロールして、コメントを見てみますと、 stknohg 2018/06/07 09:15 「私も正確な答えを把握していないのですが、調べた限りLastuseTimeプロパティは ユーザー毎のレジストリの実体であるNTUSER.datの更新時刻と連動する値になる様です。 プロファイルのフォルダ(C:\Users\Administratorなど)の更新時刻とは別物なので エクスプローラーからは見れません」とあります。 レジストリの実体が更新されると、LastuseTimeも更新されると理解できます。 なので、何処かの時点で、レジストリの実体が更新される為だと思われます。 お手数ですが、LastUseTimeについて、もう1つ質問を書くと 詳しい方のアドバイスが聞けると思います。質問は詳しく書くのがコツです。 諦めないで頑張ってください。応援しています! お返事有り難うございました。 そして感謝しています。
youyou1982

2022/01/17 00:16

ccc-様 ご提示いただいた方法で、コマンドそのものの間違いはないことが確認できました。 NTUSER.datが更新されてしまい、想定したPowerShellで要件の実現は現時点では難しいのですが、 これはまた別問題になりますので、本件はベストアンサーにさせていただきます。 本当に助かりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問