web-dev-qa-db-ja.com

GPO RDP経由で接続されている場合にのみスクリーンセーバーを無効にする

RDP接続のアイドル時間のスクリーンセーバーを無効にするGPOオプションはありますが、インタラクティブログインのアイドル時間のスクリーンセーバーオプションは保持しますか?

編集:すべてのユーザーはTSユーザーであり、ローカルでもあるため、同じOUにいます。 RDPを実行するときは、スクリーンセーバーを「無効」にする必要があります。

6

数か月前、この問題の解決策をここに公開しました。 tfrederick74656(下記)の投稿に対する反応として、リモートデスクトップのアイテムレベルのターゲティングを使用したより良い解決策があると述べました。

これを投稿した後、1〜2日間は機能しましたが、その後は何もしませんでした。他のことをして何ヶ月か考えた後、私は最初からやり直しました。そして今回、私は本当に問題の解決策を持っています!

目標:RDPを除く、ロック画面ポリシーが適用されたすべてのラップトップ、デスクトップ、サーバー

これはもはやアイテムレベルのターゲティングソリューションではなく、スクリプトと1つの設定をGPOにまとめたものです。他の場所で述べたように、4つの設定が必要です。

  • スクリーンセーバーを有効にする

  • スクリーンセーバーを保護する有効なパスワード

  • 有効特定のスクリーンセーバーを強制する

  • 有効なScreenSaveTimeOut [秒単位の時間]

この機能の原因となる設定がわからないため、すべてをスクリプトに含めたいと思いました。 1つの設定が見つからなかったため、これは他の設定から分離されています:特定のスクリーンセーバーを強制します。 (必要なスクリーンセーバーをシステムに指示する必要はありません。)もう1つ必要なのは、スクリプトです:LockDesktopAfter3MinutesExceptRDP.PS1

GPOは次のとおりです。ユーザー構成-ポリシー-管理用テンプレート-コントロールパネル-パーソナライズ-特定のスクリーンセーバーを強制する:有効(必要なスクリーンセーバーをシステムに指示する必要はありません)。

Group Policy

そして、これが私がGPOに追加したスクリプトです。

$File = "c:\temp\sessions.txt"
query session > $File
$text = Get-Content $File
ForEach ($Line in $text)
{
If ($Line -like '*>console*')
    {
    #console session
    Set-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop\" -Name ScreenSaveActive -Value 1
    Set-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop\" -Name ScreenSaverIsSecure -Value 1
    Set-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop\" -Name ScreenSaveTimeOut -Value 180
    }
ElseIf ($Line -like '*>rdp-tcp*')
    {
    #RDP session
    Set-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop\" -Name ScreenSaveActive -Value 0
    Set-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop\" -Name ScreenSaverIsSecure -Value 0
    Set-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Control Panel\Desktop\" -Name ScreenSaveTimeOut -Value 86400
    }
}
# Apply this new policy now (immediately after this registry change)
Start-Sleep -s 10
Start-Process -FilePath "rundll32.exe" -ArgumentList "user32.dll, UpdatePerUserSystemParameters 1, True"

そして、これがスクリプトの内容です。

コマンドボックスに「querysession」と入力すると、セッションと他の可能なセッションが数行で表示されます。あなた自身のセッションには、行の先頭に「より大きい記号」があります。

PowerShellスクリプトは、この出力を1行ずつ読み取り、「> console」または「> rdp-tcp」が存在するかどうかを確認します。これで、リモートデスクトップ(デスクトップ)とコンソールデスクトップのどちらを扱っているかがわかりました。レジストリ項目を変更することにより、状況に応じてデスクトップのロック動作を変更できるようになりました。

しかし、これは解決策の半分にすぎません。

本当の問題は、今すぐ結果が欲しいことをシステムに伝えなければならないことでした。これは、スクリプトの最後の行を実行することによって行われます。

これがお役に立てば幸いです。

1
Wim Prins

@ELTコメントのように、ループバックポリシーを設定する必要があるため、完全なセットアップは次のようになります。

  • サーバーのOUにGPOを作成します。
  • ユーザー構成ブランチの「スクリーンセーバーを有効にする」ポリシーを「無効」に設定します。
  • [コンピューターの構成]ブランチで、[ユーザーグループポリシーのループバック処理モードを構成する]を[有効]、モードを[マージ]に設定します。

この最後のポリシーは、ユーザーがサーバーのあるOUに属しているかのように、このGPOの設定を強制的に計算します。したがって、「スクリーンセーバーを有効にする:無効」を使用します。

1
curropar

スクリーンセーバーを使ってこれを行ったことはありませんが、プリンターに同様のタイプのポリシーを実装しています。

ターミナルサーバーで特定のOUのみを対象とするGPO-注*はコンピューターオブジェクトを対象としています。ループバックポリシーを使用して、ユーザーにスクリーンセーバー設定を適用します。正しく構成されている場合は、logonのすべてのユーザーに適用されます。

これは古い質問であり、答えは少しハックですが、セッション名にRDPが含まれている場合は、グループポリシー設定レジストリアイテムを作成してスクリーンセーバーを無効にすることができます。レジストリ項目を設定して、タイムアウトを9999分などのばかげたものに設定できます。

Screen Saver Timeout Registry Item

次に、セッション名がRDPセッションと一致する場合にのみ適用されるようにターゲティングを設定します。ワイルドカードはありませんが、RDPにログオンするたびに番号が増加し、再起動時にリセットされるため、まとめて配置します。

Targeting Editor

必ずしもエレガントなソリューションではありませんが、それで仕事は終わります。これをユーザーポリシーとして作成し、[現在のユーザーコンテキストで実行する]チェックボックスをオンにしてください。

0
tfrederick74656

TSユーザーを別のOUに配置します Microsoftのtechnet記事

以下のグループポリシースナップインでこのPOを変更します。

enter image description here

0
Fergus