名前に特定のパターンがあるスケジュールされたタスクを検索しようとしています。私の場合、スケジュールされたタスクの名前にこのパターン「ServiceNow」が含まれているはずです。このためにGet-ScheduledTask
コマンドを使用していますが、このコマンドはWindows Server 2008 R2では失敗します。
$taskPattern = "ServiceNow"
$taskDetails = Get-ScheduledTask | Where-Object {$_.TaskName -match $taskPattern }
$taskName = $taskDetails.TaskName
このスクリプトはエラーで失敗します:
"Get-ScheduledTask:「Get-ScheduledTask」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれているかどうか、パスが修正してもう一度お試しください。」
次に、「(taskname Date&Time State)」を与えるこのアプローチを試しましたが、出力からタスク名のみを抽出する方法がわかりません。
$taskPattern = "ServiceNow"
$taskExists = schtasks /query | select-string -patt $taskPattern
$taskExists
実際のタスク名を抽出するだけでWindows Server 2008 R2で機能させる方法を教えていただけますか?前もって感謝します
Windows 2012用に導入され、誰もバックポートしていないため、Windows 2008 R2ではGet-ScheduledTask
を取得できません。詳細は github のリンクを参照してください。
状況を最もよく表すコメントは次のとおりです。
こんにちは@dronkoff-このモジュールはPS 4.0でサポートされています。ただし、問題はPowerShellのバージョンにはありません。問題は、このリソースが依存するScheduledTasksモジュールがWindows Server 2008R2に組み込まれていないことです。 Windows Server 2012に最初に含まれていました。
これは、PowerShellモジュールの多くに当てはまります。古いバージョンのWindows(ネットワークなど)にはありません。奇妙な状況では、簡単な回避策があります。ただし、この場合、完全に書き直さないとリソースを変換してschtasks.exeを使用することは不可能であり、おそらく非常に不安定でバグの多いものになります(異なるschtasksのローカライズバージョンで発生する問題は言うまでもありません)。残念ながら、これが実際に発生することはありません(コミュニティの他の誰かがこれを行う方法についていくつかのアイデアを持っている場合を除きます)。
しかし、あなたは正しいです。これは、Windows Server 2008R2が現在サポートされていないことを言及する必要があります。
それを回避するには、正しいスイッチでschtask
を使用します。
例のようにMicrosoft
フォルダーにある場合は、実行するだけです。
schtasks /tn \Microsoft\ServiceNow /query /fo LIST
出力:
Folder: \Microsoft
HostName: XXXXXACL06
TaskName: \Microsoft\ServiceNow
Next Run Time: 7/4/2018 8:16:22 AM
Status: Ready
Logon Mode: Interactive only
詳細が必要な場合は、/v
(詳細)スイッチを使用できます。
schtasks /tn \Microsoft\ServiceNow /query /v > service_now_details.txt
Edit-パターンを見つける
検索するパターンのみがある場合は、追加のツールを使用して文字列を検索する必要があります。ウィンドウはネイティブでfindstr
(またはSelect-String
(short _sls
)in powershell)をサポートします:
次に使用できるタスク名を見つけるには:
schtasks /query /fo LIST | findstr "ServiceNow"
またはワイルドチャーターでも
schtasks /query /fo LIST | findstr "ServiceNo*"
またはpowershell
方法:
schtasks /query /fo LIST | sls 'ServiceNo*'
すべての場合の出力は次のようになります(私のタスクの名前はServiceNow
なので):
TaskName: \Microsoft\ServiceNow
Edit2大文字と小文字の区別
大文字と小文字を区別しない文字列を検索する場合:findstr
の場合、/I
を追加して、大文字と小文字を区別しないようにする必要があります。 powershellのselect-string
(sls)は、本来は区別されません。
MSスクリプトギャラリーにはすばらしいスクリプトがあります Get-ScheduledTasks (サービス名の最後のSに注意してください)。これは、Windows Server 2003/Windows XPに遡る古いバージョンのWindowsで機能します。
これを作成して共有してくれた素晴らしいWarren F(別名Rambling Cookie Monster)に感謝します。