Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
RemoteImportModule.Tests.ps1122 linesDownload Raw Back to Microsoft.PowerShell.Core
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3Describe "Remote import-module tests" -Tags 'Feature','RequireAdminOnWindows' {4 5    BeforeAll {6        $originalDefaultParameterValues = $PSDefaultParameterValues.Clone()7        $modulePath = "$testdrive\Modules\TestImport"8 9        $pendingTest = (Test-IsWinWow64)10        $skipTest = !$IsWindows11 12        if ($skipTest) {13            $PSDefaultParameterValues["it:skip"] = $true14        } elseif ($pendingTest) {15            $PSDefaultParameterValues["it:pending"] = $true16        } else {17            $pssession = New-RemoteSession18            Invoke-Command -Session $pssession -Scriptblock { $env:PSModulePath += ";${using:testdrive}" }19            # pending https://github.com/PowerShell/PowerShell/issues/481920            # $cimsession = New-RemoteSession -CimSession21            $null = New-Item -ItemType Directory -Path $modulePath22            Set-Content -Path $modulePath\testimport.psm1 -Value "function test-hello { 'world' }"23            New-ModuleManifest -Path $modulePath\testimport.psd1 -ModuleVersion 1.2.3 -RootModule testimport.psm1 -FunctionsToExport "test-hello" `24                -HelpInfoUri "https://help" -Guid (New-Guid)25        }26    }27 28    AfterAll {29        $global:PSDefaultParameterValues = $originalDefaultParameterValues30        if ($IsWindows -and !$pendingTest -and !$skipTest) {31            $pssession | Remove-PSSession -ErrorAction SilentlyContinue32        }33 34        Remove-Module TestImport -Force -ErrorAction SilentlyContinue35    }36 37    BeforeEach {38        Remove-Module TestImport -Force -ErrorAction SilentlyContinue39    }40 41    It "Import-Module can be called as an API with '<parameter>' = '<value>'" -TestCases @(42        @{parameter = "Global"             ; value = $true},43        @{parameter = "Global"             ; value = $false},44        @{parameter = "Prefix"             ; value = "Hello"},45        @{parameter = "Name"               ; value = "foo","bar"},46        @{parameter = "FullyQualifiedName" ; value = @{ModuleName='foo';RequiredVersion='0.0'},@{ModuleName='bar';RequiredVersion='1.1'}},47        @{parameter = "Assembly"           ; script = { [System.AppDomain]::CurrentDomain.GetAssemblies() | Select-Object -First 2 }}48        @{parameter = "Function"           ; value = "foo","bar"},49        @{parameter = "Cmdlet"             ; value = "foo","bar"},50        @{parameter = "Variable"           ; value = "foo","bar"},51        @{parameter = "Alias"              ; value = "foo","bar"},52        @{parameter = "Force"              ; value = $true},53        @{parameter = "Force"              ; value = $false},54        @{parameter = "PassThru"           ; value = $true},55        @{parameter = "PassThru"           ; value = $false},56        @{parameter = "AsCustomObject"     ; value = $true},57        @{parameter = "AsCustomObject"     ; value = $false},58        @{parameter = "MinimumVersion"     ; value = "1.2.3"},59        @{parameter = "MaximumVersion"     ; value = "3.2.1"},60        @{parameter = "RequiredVersion"    ; value = "1.1.1"},61        @{parameter = "ArgumentList"       ; value = "hello","world"},62        @{parameter = "DisableNameChecking"; value = $true},63        @{parameter = "DisableNameChecking"; value = $false},64        @{parameter = "NoClobber"          ; value = $true},65        @{parameter = "NoClobber"          ; value = $false},66        @{parameter = "Scope"              ; value = "Local"},67        @{parameter = "Scope"              ; value = "Global"},68        @{parameter = "PSSession"          ; value = $pssession},69        # @{parameter = "CimSession"         ; value = $cimsession},70        @{parameter = "CimResourceUri"     ; value = "http://foo/"},71        @{parameter = "CimNamespace"       ; value = "foo"}72        ) {73        param($parameter, $value, $script)74 75        $importModuleCommand = [Microsoft.PowerShell.Commands.ImportModuleCommand]::new()76        if ($script -ne $null) {77            $value = & $script78        }79        $importModuleCommand.$parameter = $value80        if ($parameter -eq "FullyQualifiedName") {81            $importModuleCommand.FullyQualifiedName.Count | Should -BeExactly 282            $importModuleCommand.FullyQualifiedName | Should -BeOfType Microsoft.PowerShell.Commands.ModuleSpecification83            $importModuleCommand.FullyQualifiedName[0].Name | Should -BeExactly "foo"84            $importModuleCommand.FullyQualifiedName[0].RequiredVersion | Should -Be "0.0"85            $importModuleCommand.FullyQualifiedName[1].Name | Should -BeExactly "bar"86            $importModuleCommand.FullyQualifiedName[1].RequiredVersion | Should -Be "1.1"87        } else {88            $importModuleCommand.$parameter | Should -BeExactly $value89        }90    }91 92    It "Import-Module can import over remote session: <test>" -TestCases @(93        @{ test = "pssession"              ; parameters = @{Name="TestImport";PSSession=$pssession}},94#        @{ test = "cimsession"             ; parameters = @{Name="TestImport";CimSession=$cimsession}},95        @{ test = "minimumversion"         ; parameters = @{Name="TestImport";PSSession=$pssession;MinimumVersion="1.0";Force=$true}},96        @{ test = "requiredversion"        ; parameters = @{Name="TestImport";PSSession=$pssession;RequiredVersion="1.2.3"}},97        @{ test = "maxiumversion"          ; parameters = @{Name="TestImport";PSSession=$pssession;MaximumVersion="2.0"}},98        @{ test = "invalid miniumversion"  ; parameters = @{Name="TestImport";PSSession=$pssession;MinimumVersion="2.0"};99            errorid = "Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand,Microsoft.PowerShell.Commands.ImportModuleCommand"},100        @{ test = "invalid maximumversion" ; parameters = @{Name="TestImport";PSSession=$pssession;MaximumVersion="1.0"};101            errorid = "Modules_ModuleWithVersionNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand,Microsoft.PowerShell.Commands.ImportModuleCommand"},102        @{ test = "fullyqualifiedname"     ; parameters = @{FullyQualifiedName=@{Modulename="TestImport"; RequiredVersion="1.2.3"};PSSession=$pssession}}103        ) {104        param ($test, $parameters, $errorid)105 106        Invoke-Command -Session $pssession -ScriptBlock { $env:PSModulePath += ";$(Split-Path $using:modulePath)"}107        Get-Module TestImport | Should -BeNullOrEmpty108        if ($errorid) {109            { Import-Module @parameters -ErrorAction Stop } | Should -Throw -ErrorId $errorid110        } else {111            Import-Module @parameters112            $module = Get-Module TestImport113            $module.Name | Should -BeExactly "TestImport"114 115            # generated proxy module always uses 1.0116            $module.Version | Should -BeExactly "1.0"117 118            test-hello | Should -BeExactly "world"119        }120    }121}122