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

За исключением пути пользователя, конечно.


person Stig    schedule 06.10.2014    source источник


Ответы (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

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

person Stig    schedule 07.10.2014
comment
Как вы определили, что он использует 64-битную версию, а не 32-битную? - person bain2236; 10.01.2020

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

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

person Stephen Connolly    schedule 06.10.2014
comment
ааа, это может быть политика выполнения .. я проверю, что завтра я попытался включить полный путь к модулю, но это все равно не удалось - я думаю, что это была та же ошибка, но я не уверен на 100%. вернется завтра - person Stig; 06.10.2014
comment
Это не ExecutionPolicy, для него задано неограниченное значение. - person Stig; 07.10.2014