2017-12-15 4 views
0

Ich habe ein PowerShell-Testskript Common.tests.ps1 mit Pester gegen einige Funktionen in einem PowerShell-Skript Common.ps1 in demselben Verzeichnis erstellt. Es gibt ein TestInitializer.ps1-Skript, ebenfalls im selben Verzeichnis, das das Microsoft.Xrm.Data.PowerShell-Modul zum Erstellen und Abrufen von Datensätzen in einer Dynamics CRM-Instanz verwendet.PowerShell-Modul kann nicht geladen werden, wenn Pester-Test in Visual Studio ausgeführt wird

Wenn die Powershell-Skript-Test von Visual Studio ausgeführt wird, schlägt der Test im Test Explorer mit einer Nachricht:

CommandNotFoundException: Das Modul 'Microsoft.Xrm.Data.PowerShell' kann nicht geladen werden. Führen Sie für weitere Informationen "Import-Module Microsoft.Xrm.Data.PowerShell" aus.

Derselbe Test wird bei der Ausführung von der PowerShell ISE jedoch ohne Problem ausgeführt. Dies scheint so zu sein, als wäre das Modul nicht für die Instanz installiert, wie sie von Visual Studio ausgeführt wird (ich habe das bestätigt, wenn Get-Module -ListAvailable ausgeführt wurde und die Ausgabe das Modul Microsoft.Xrm.Data.PowerShell für den Visual Studio-Test nicht enthält), obwohl sogar explizite Aufrufe wie : Import-Module Microsoft.Xrm.Data.PowerShell -Global -Force scheint nicht das Modul während der Skriptausführung mit Visual Studio zu laden.

Hier Common.test.ps1:

$here = (Split-Path -Parent $MyInvocation.MyCommand.Path) 
. $here\Common.ps1 
. $here\TestInitializer.ps1 

Describe "SelectionToSingleCharString" { 
Context "StringTransforms" { 
    It "Retrieves a CRM record and uses the optionset value to retrieve a single character" { 
    SelectionToSingleCharString($crmRecord.new_type) | Should Be "I" 
     } 
    } 
} 

Snippet von TestInitializer.ps1:

# Whether or not this is uncommented does not matter 
#Import-Module "$env:SystemRoot\System32\WindowsPowerShell\v1.0\Modules\Microsoft.Xrm.Data.PowerShell\Microsoft.Xrm.Data.PowerShell.psd1" -Global -Force 


#$modules = Get-Module -ListAvailable 
#Write-Host $modules 

# Failing here 
Microsoft.Xrm.Data.PowerShell\Connect-CrmOnPremDiscovery -ServerUrl $loginServerUrl -OrganizationName $loginOrgName -Credential $cred 

ich stattdessen den Test entwerfen kann Mock zu verwenden, anstatt wirklich versuchen \ lesen Aufzeichnungen zu erstellen, wenn auch nicht in der Lage zu laden externe Module und Ausführung in Visual Studio wäre limitierend.

Antwort

0

Modul Hinsichtlich der Installation Verzeichnisse (das Überspringen, wenn Sie in dem aktuellen Problem interessiert sind):

Zuerst sollten Sie niemals Module $PSHome\Modules (%Windir%\System32\WindowsPowerShell\v1.0\Modules) installieren. Dieser Ordner ist für Module reserviert, die nur mit Windows ausgeliefert werden.

Sie sollten immer Ihre Module nur durch Ihre Benutzer unter folgendem Pfad verwendet installieren:

$Home\Documents\WindowsPowerShell\Modules 

Und für eine systemweite Installation unter:

$Env:ProgramFiles\WindowsPowerShell\Modules 

Literaturhinweise bezüglich der Installation von Modulen in Powershell kann auf der MSDN gefunden werden.

In Bezug auf Ihr eigentliches Problem:

Welche Visual Studio Version verwenden Sie? Ich habe die VS 2017 Community Edition installiert und kann Ihren Fehler nicht reproduzieren. Meine PowerShell läuft auch als 64-Bit-Prozess. Ihre PowerShell könnte als 32-Bit-Prozess ausgeführt werden. Für die 32-Bit Powershell sind die Modulverzeichnisse unterschiedlich. Dies würde erklären, warum das von Ihnen installierte Modul nicht in Visual Studio angezeigt wird.

Sie können prüfen, ob der Powershell ist in einem 64-Bit-Prozess mit dem folgenden Befehl:

PS> [Environment]::Is64BitProcess 
True 

Um Ihre Module zugänglich für die 32-Bit-Powershell Sie sie unter folgendem Pfad installieren zu machen aswell:

{$Env:ProgramFiles(x86)}\WindowsPowerShell\Modules 
+0

Dies ist in Visual Studio 2015, und ja, es scheint, der Test wurde in einem 32-Bit-Prozess ausgeführt. Als ich "Install-Module Microsoft.Xrm.Data.PowerShell" in der Windows PowerShell (x86) -Umgebung ausgeführt und den Test erneut ausgeführt hatte, war es erfolgreich. –

Verwandte Themen