Модули 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

Но спасибо за ваше внимание.

Полагаться на автоматическое обнаружение модуля очень сложно. Ваш скрипт должен явно определять все необходимые ему модули, а затем явно загружать их.

Если модуль отсутствует в списке, это может быть связано с тем, что он не подписан, а политика выполнения не позволяет его загружать или обнаруживать. Попробуйте явно загрузить один из модулей и посмотрите, какую ошибку вы получите.

Другие вопросы по тегам