Модули Powershell в запланированном задании
Есть кое-что о модулях, которые я не совсем понимаю....
Если я как обычный пользователь делаю
get-module -listavailable
Я получаю такой результат:
Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules
ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest ADRMS {Update-ADRMS, Unins
Manifest AppLocker {Set-AppLockerPolicy
Manifest BestPractices {Get-BpaModel, Invok
Manifest BitsTransfer {Add-BitsFile, Remov
Manifest CimCmdlets {Get-CimAssociatedIn
Script DSV
Script DSVAsset {Get-HTMLPage, Get-H
Script DSVDB {Execute-UpdateULLoC
Script DSVHnas {Get-HNASFileScan, B
Script DSVLog {Start-DSVTranscript
Script Experimental.IO {Where-Wildcard, Get
Manifest FailoverClusters {Add-ClusterDisk, Ad
Script ISE {New-IseSnippet, Imp
Manifest Microsoft.PowerShell.Diagnostics {Get-WinEvent, Get-C
Manifest Microsoft.PowerShell.Host {Start-Transcript, S
Manifest Microsoft.PowerShell.Management {Add-Content, Clear-
Manifest Microsoft.PowerShell.Security {Get-Acl, Set-Acl, G
Manifest Microsoft.PowerShell.Utility {Format-List, Format
Manifest Microsoft.WSMan.Management {Disable-WSManCredSS
Script Module {New-PSScript, New-G
Script PSDiagnostics {Disable-PSTrace, Di
Script PSFTP {Send-FTPItem, Recei
Binary PSScheduledJob {New-JobTrigger, Add
Manifest PSWorkflow {New-PSWorkflowExecu
Manifest PSWorkflowUtility Invoke-AsWorkflow
Manifest ServerManager {Get-WindowsFeature,
Manifest TroubleshootingPack {Get-Troubleshooting
Manifest WebAdministration {Start-WebCommitDela
и это то, что я ожидаю...
Но, делая то же самое с запланированной задачей (с другим пользователем), я получаю это:
Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules
ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest BitsTransfer {Add-BitsFile, Remove-BitsTra...
Manifest CimCmdlets {Get-CimAssociatedInstance, G...
Script ISE {New-IseSnippet, Import-IseSn...
Manifest Microsoft.PowerShell.Diagnostics {Get-WinEvent, Get-Counter, I...
Manifest Microsoft.PowerShell.Host {Start-Transcript, Stop-Trans...
Manifest Microsoft.PowerShell.Management {Add-Content, Clear-Content, ...
Manifest Microsoft.PowerShell.Security {Get-Acl, Set-Acl, Get-PfxCer...
Manifest Microsoft.PowerShell.Utility {Format-List, Format-Custom, ...
Manifest Microsoft.WSMan.Management {Disable-WSManCredSSP, Enable...
Script PSDiagnostics {Disable-PSTrace, Disable-PSW...
Binary PSScheduledJob {New-JobTrigger, Add-JobTrigg...
Manifest TroubleshootingPack {Get-TroubleshootingPack, Inv...
Manifest WebAdministration {Start-WebCommitDelay, Stop-W...
Почему есть разница между этими двумя?
Я озадачен тем, что модуль, который меня на самом деле интересует, это модули, которые я создал сам и положил в папку:
C:\Windows\system32\WindowsPowerShell\v1.0\Modules
Что, кажется, работает нормально, за исключением запуска через запланированные задачи.
Что мне не хватает? Что я забыл?
Далее - могу подтвердить $env:PSModulePath
одинаково для обоих:
C:\Users\GRIT.SVC.IPPlan\Documents\WindowsPowerShell\Modules;
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\;
C:\Program Files\Common Files\Microsoft Lync Server 2013\Modules\;
C:\Program Files\Quest Software\Management Shell for AD\;
C:\Program Files\Microsoft Monitoring Agent\Agent\PowerShell\;
C:\Program Files\System Center Operations Manager 2012\Powershell\
За исключением пути пользователя, конечно.
2 ответа
Нашел проблему...
Это не имеет ничего общего с ExecutionPolicy - ни прямой путь не может загрузить модуль либо...
Это было намного проще, как только это было найдено...
проблема в 64/32 бит....
модули находятся в C:\Windows\System32\WindowsPowerShell\v1.0\Modules
Однако задача выполнялась
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
и поэтому модули должны быть расположены в C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules
Но спасибо за ваше внимание.
Полагаться на автоматическое обнаружение модуля очень сложно. Ваш скрипт должен явно определять все необходимые ему модули, а затем явно загружать их.
Если модуль отсутствует в списке, это может быть связано с тем, что он не подписан, а политика выполнения не позволяет его загружать или обнаруживать. Попробуйте явно загрузить один из модулей и посмотрите, какую ошибку вы получите.