From df271c48cc9a1e780e45d803c8c5b6e21170a032 Mon Sep 17 00:00:00 2001 From: Manikyam Bavandla Date: Thu, 7 Jul 2016 18:06:20 -0700 Subject: [PATCH 1/4] PowerShellGet changes for Linux --- .../Shared/PowerShellGet/PSGet.Resource.psd1 | Bin 78998 -> 78920 bytes .../Shared/PowerShellGet/PSModule.psm1 | 131 +++++++++++------- 2 files changed, 82 insertions(+), 49 deletions(-) diff --git a/src/Modules/Shared/PowerShellGet/PSGet.Resource.psd1 b/src/Modules/Shared/PowerShellGet/PSGet.Resource.psd1 index 6dfd08222a2a507b315dee74819f83970a894f7c..5fc17b600e3eaabd4f23e4fb60444702931817f7 100644 GIT binary patch delta 307 zcmbRClI6q;mWC~it2o#d7!n!s7*Zw&vWv4iGvqTAO=eV5-+qpRah2%wJI0K&CMzfk zO#UFtvwemfqYBsLs5YMM30jPHtn!Ww3JkssnGDGcML=!EK%B-I{3Q$-K#NL%ddh)x@pMNuM)Aom@?!kSK#h4otvO($N+uUNN>0D0 z%P7Hb#8Ati4pg58Ha~ZIp$?p6MNGjB?W#7&Edl>oF)yPK*_wd~ONH^gFtY zVv{%AVzI0QYARw#1v;b@Xe!9cOrQ-4Kz=0P(j~VT^-&yv2}Fh#3IJ`%n=8 delta 288 zcmX@{f@RuEmWC~it2ic`Nr_E1P~_YGg@bXG==3agMv=)MWO=rS$TO;NO`3 zd2-=t(aAlZ_@-abXJnhcMjPnPm=dnZK1-w~E3mLl4lop(9M#6Ny+xDJj&=Ga9mcZh z2V@zIU^;}Rcj+=#O%6~Ln=WR=D8QWwbe96qL-`CP(^d5tgD0~oLHuoI$SA}N0K#ui AW&i*H diff --git a/src/Modules/Shared/PowerShellGet/PSModule.psm1 b/src/Modules/Shared/PowerShellGet/PSModule.psm1 index 6f53550ef0..c3d986e34e 100644 --- a/src/Modules/Shared/PowerShellGet/PSModule.psm1 +++ b/src/Modules/Shared/PowerShellGet/PSModule.psm1 @@ -14,25 +14,40 @@ Microsoft.PowerShell.Core\Set-StrictMode -Version Latest # Check if this is nano server. [System.Runtime.Loader.AssemblyLoadContext] is only available on NanoServer $script:isNanoServer = $null -ne ('System.Runtime.Loader.AssemblyLoadContext' -as [Type]) -try + +if($IsWindows) { - $script:MyDocumentsFolderPath = [Environment]::GetFolderPath("MyDocuments") + $script:ProgramFilesPSPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramFiles -ChildPath "WindowsPowerShell" } -catch +else { - $script:MyDocumentsFolderPath = $null + $script:ProgramFilesPSPath = $PSHome } -$script:ProgramFilesPSPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramFiles -ChildPath "WindowsPowerShell" +if($IsWindows) +{ + try + { + $script:MyDocumentsFolderPath = [Environment]::GetFolderPath("MyDocuments") + } + catch + { + $script:MyDocumentsFolderPath = $null + } -$script:MyDocumentsPSPath = if($script:MyDocumentsFolderPath) - { - Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsFolderPath -ChildPath "WindowsPowerShell" - } - else - { - Microsoft.PowerShell.Management\Join-Path -Path $env:USERPROFILE -ChildPath "Documents\WindowsPowerShell" - } + $script:MyDocumentsPSPath = if($script:MyDocumentsFolderPath) + { + Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsFolderPath -ChildPath "WindowsPowerShell" + } + else + { + Microsoft.PowerShell.Management\Join-Path -Path $env:USERPROFILE -ChildPath "Documents\WindowsPowerShell" + } +} +else +{ + $script:MyDocumentsPSPath = Microsoft.PowerShell.Management\Join-Path -Path $HOME -ChildPath ".local/share/PowerShell" +} $script:ProgramFilesModulesPath = Microsoft.PowerShell.Management\Join-Path -Path $script:ProgramFilesPSPath -ChildPath "Modules" $script:MyDocumentsModulesPath = Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsPSPath -ChildPath "Modules" @@ -43,8 +58,18 @@ $script:MyDocumentsScriptsPath = Microsoft.PowerShell.Management\Join-Path -Path $script:TempPath = ([System.IO.DirectoryInfo]$env:TEMP).FullName $script:PSGetItemInfoFileName = "PSGetModuleInfo.xml" -$script:PSGetProgramDataPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramData -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\' -$script:PSGetAppLocalPath = Microsoft.PowerShell.Management\Join-Path -Path $env:LOCALAPPDATA -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\' + +if($IsWindows) +{ + $script:PSGetProgramDataPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramData -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\' + $script:PSGetAppLocalPath = Microsoft.PowerShell.Management\Join-Path -Path $env:LOCALAPPDATA -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\' +} +else +{ + $script:PSGetProgramDataPath = "$HOME/.config/powershell/PowerShellGet" #TODO: Get $env:ProgramData equivalent + $script:PSGetAppLocalPath = "$HOME/.config/powershell/PowerShellGet" +} + $script:PSGetModuleSourcesFilePath = Microsoft.PowerShell.Management\Join-Path -Path $script:PSGetAppLocalPath -ChildPath "PSRepositories.xml" $script:PSGetModuleSources = $null $script:PSGetInstalledModules = $null @@ -89,8 +114,8 @@ $script:NuGetProviderVersion = [Version]'2.8.5.201' $script:SupportsPSModulesFeatureName="supports-powershell-modules" $script:FastPackRefHastable = @{} -$script:NuGetBinaryProgramDataPath="$env:ProgramFiles\PackageManagement\ProviderAssemblies" -$script:NuGetBinaryLocalAppDataPath="$env:LOCALAPPDATA\PackageManagement\ProviderAssemblies" +$script:NuGetBinaryProgramDataPath=if($IsWindows) {"$env:ProgramFiles\PackageManagement\ProviderAssemblies"} +$script:NuGetBinaryLocalAppDataPath=if($IsWindows) {"$env:LOCALAPPDATA\PackageManagement\ProviderAssemblies"} # go fwlink for 'https://nuget.org/nuget.exe' $script:NuGetClientSourceURL = 'http://go.microsoft.com/fwlink/?LinkID=690216&clcid=0x409' $script:NuGetExeName = 'NuGet.exe' @@ -577,7 +602,7 @@ catch # Ignore the error and try adding the type below } -if(-not $script:TelemetryEnabled) +if(-not $script:TelemetryEnabled -and $IsWindows) { try { @@ -682,7 +707,7 @@ function Publish-Module Begin { - if($script:isNanoServer) { + if($script:isNanoServer -or $IsCore) { $message = $LocalizedData.PublishPSArtifactUnsupportedOnNano -f "Module" ThrowError -ExceptionName "System.InvalidOperationException" ` -ExceptionMessage $message ` @@ -1808,10 +1833,6 @@ function Update-Module [PSCredential] $ProxyCredential, - [Parameter()] - [switch] - $SkipPublisherCheck, - [Parameter()] [Switch] $Force @@ -2485,7 +2506,7 @@ function Publish-Script Begin { - if($script:isNanoServer) { + if($script:isNanoServer -or $IsCore) { $message = $LocalizedData.PublishPSArtifactUnsupportedOnNano -f "Script" ThrowError -ExceptionName "System.InvalidOperationException" ` -ExceptionMessage $message ` @@ -6129,7 +6150,7 @@ function Ping-Endpoint $results = @{} $WebProxy = $null - if($Proxy) + if($Proxy -and $IsWindows) { $ProxyNetworkCredential = $null if($ProxyCredential) @@ -6359,6 +6380,11 @@ function ValidateAndSet-PATHVariableIfUserAccepts $Request ) + if(-not $IsWindows) + { + return + } + Set-PSGetSettingsVariable # Check and add the scope path to PATH environment variable if USER accepts the prompt. @@ -7154,9 +7180,10 @@ function Install-NuGetClientBinaries $Force ) - if($script:NuGetProvider -and - (-not $BootstrapNuGetExe -or - ($script:NuGetExePath -and (Microsoft.PowerShell.Management\Test-Path -Path $script:NuGetExePath)))) + if(-not $IsWindows -or + ($script:NuGetProvider -and + (-not $BootstrapNuGetExe -or + ($script:NuGetExePath -and (Microsoft.PowerShell.Management\Test-Path -Path $script:NuGetExePath))))) { return } @@ -7256,7 +7283,7 @@ function Install-NuGetClientBinaries } # On Nano server we don't need NuGet.exe - if(-not $bootstrapNuGetProvider -and ($script:isNanoServer -or -not $BootstrapNuGetExe)) + if(-not $bootstrapNuGetProvider -and ($script:isNanoServer -or $IsCore -or -not $BootstrapNuGetExe)) { return } @@ -7313,7 +7340,7 @@ function Install-NuGetClientBinaries } } - if($BootstrapNuGetExe -and -not $script:isNanoServer) + if($BootstrapNuGetExe -and -not $script:isNanoServer -and -not $IsCore) { Write-Verbose -Message $LocalizedData.DownloadingNugetExe @@ -7397,10 +7424,19 @@ function Test-RunningAsElevated [OutputType([bool])] Param() - $wid=[System.Security.Principal.WindowsIdentity]::GetCurrent() - $prp=new-object System.Security.Principal.WindowsPrincipal($wid) - $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator - return $prp.IsInRole($adm) + if($IsWindows) + { + $wid=[System.Security.Principal.WindowsIdentity]::GetCurrent() + $prp=new-object System.Security.Principal.WindowsPrincipal($wid) + $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator + return $prp.IsInRole($adm) + } + elseif($IsLinux) + { + return ($env:SUDO_UID -eq '1000') + } + + return $false } function Get-EscapedString @@ -13638,6 +13674,10 @@ function Validate-ModuleAuthenticodeSignature [string] $InstallLocation, + [Parameter()] + [Switch] + $IsUpdateOperation, + [Parameter()] [Switch] $SkipPublisherCheck @@ -13652,21 +13692,13 @@ function Validate-ModuleAuthenticodeSignature } # Skip the publisher check when -SkipPublisherCheck is specified and - # previously-installed module is not signed by Microsoft - if($SkipPublisherCheck) + # it is not an update operation. + if(-not $IsUpdateOperation -and $SkipPublisherCheck) { - if($InstalledModuleDetails -and $InstalledModuleDetails.IsMicrosoftCertificate) - { - $Message = $LocalizedData.ProceedingWithPublisherCheckForMicrosoftModules -f ($CurrentModuleInfo.Name) - Write-Verbose -Message $message - } - else - { - $Message = $LocalizedData.SkippingPublisherCheck -f ($CurrentModuleInfo.Version, $CurrentModuleInfo.Name) - Write-Verbose -Message $message + $Message = $LocalizedData.SkippingPublisherCheck -f ($CurrentModuleInfo.Version, $CurrentModuleInfo.Name) + Write-Verbose -Message $message - return $true - } + return $true } # Validate the catalog signature for the current module being installed. @@ -13744,7 +13776,7 @@ function Validate-ModuleAuthenticodeSignature } else { - $Message = $LocalizedData.PublishersMismatch -f ($CurrentModuleAuthenticodePublisher, $CurrentModuleInfo.Name, $CurrentModuleInfo.Version, $InstalledModuleAuthenticodePublisher, $InstalledModuleInfo.Name, $InstalledModuleVersion) + $Message = $LocalizedData.PublishersMismatch -f ($InstalledModuleInfo.Name, $InstalledModuleVersion, $CurrentModuleInfo.Name, $CurrentModuleAuthenticodePublisher, $CurrentModuleInfo.Version) ThrowError -ExceptionName 'System.InvalidOperationException' ` -ExceptionMessage $message ` -ErrorId 'PublishersMismatch' ` @@ -14130,10 +14162,11 @@ function Test-ValidManifestModule -CallerPSCmdlet $PSCmdlet ` -ErrorCategory InvalidOperation } - else + elseif($IsWindows) { $ValidationResult = Validate-ModuleAuthenticodeSignature -CurrentModuleInfo $PSModuleInfo ` -InstallLocation $InstallLocation ` + -IsUpdateOperation:$IsUpdateOperation ` -SkipPublisherCheck:$SkipPublisherCheck if($ValidationResult) From 076ad7f8e9d8db34f85d1d46bcad461b56f01a71 Mon Sep 17 00:00:00 2001 From: Manikyam Bavandla Date: Fri, 8 Jul 2016 13:36:14 -0700 Subject: [PATCH 2/4] Added mapping for $env:TEMP path in Linux. Added mapping for $env:TEMP path in Linux. --- src/Modules/Shared/PowerShellGet/PSModule.psm1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Modules/Shared/PowerShellGet/PSModule.psm1 b/src/Modules/Shared/PowerShellGet/PSModule.psm1 index c3d986e34e..ebf8b7b11c 100644 --- a/src/Modules/Shared/PowerShellGet/PSModule.psm1 +++ b/src/Modules/Shared/PowerShellGet/PSModule.psm1 @@ -56,7 +56,7 @@ $script:ProgramFilesScriptsPath = Microsoft.PowerShell.Management\Join-Path -Pat $script:MyDocumentsScriptsPath = Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsPSPath -ChildPath "Scripts" -$script:TempPath = ([System.IO.DirectoryInfo]$env:TEMP).FullName +$script:TempPath = if($IsWindows){ ([System.IO.DirectoryInfo]$env:TEMP).FullName } else { '/tmp' } $script:PSGetItemInfoFileName = "PSGetModuleInfo.xml" if($IsWindows) @@ -4963,7 +4963,7 @@ function New-ScriptFileInfo $ScriptMetadataString += $ScriptCommentHelpInfoString $ScriptMetadataString += "Param()`r`n`r`n" - $tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $env:TEMP -ChildPath "$(Get-Random).ps1" + $tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $script:TempPath -ChildPath "$(Get-Random).ps1" try { @@ -5324,7 +5324,7 @@ function Update-ScriptFileInfo return } - $tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $env:TEMP -ChildPath "$(Get-Random).ps1" + $tempScriptFilePath = Microsoft.PowerShell.Management\Join-Path -Path $script:TempPath -ChildPath "$(Get-Random).ps1" try { From 87db56d17f6d1ad20655f4b72251975974a221fd Mon Sep 17 00:00:00 2001 From: Manikyam Bavandla Date: Tue, 12 Jul 2016 14:07:42 -0700 Subject: [PATCH 3/4] Changes for Get-ChildItem, Select-Object, IsWindows, IsCore and IsLinux Changes for Get-ChildItem, Select-Object, IsWindows, IsCore and IsLinux --- .../Shared/PowerShellGet/PSModule.psm1 | 144 ++++++++++-------- 1 file changed, 78 insertions(+), 66 deletions(-) diff --git a/src/Modules/Shared/PowerShellGet/PSModule.psm1 b/src/Modules/Shared/PowerShellGet/PSModule.psm1 index ebf8b7b11c..33f01dbcc5 100644 --- a/src/Modules/Shared/PowerShellGet/PSModule.psm1 +++ b/src/Modules/Shared/PowerShellGet/PSModule.psm1 @@ -14,8 +14,11 @@ Microsoft.PowerShell.Core\Set-StrictMode -Version Latest # Check if this is nano server. [System.Runtime.Loader.AssemblyLoadContext] is only available on NanoServer $script:isNanoServer = $null -ne ('System.Runtime.Loader.AssemblyLoadContext' -as [Type]) +function IsWindows { $PSVarable = Get-Variable -Name IsWindows -ErrorAction Ignore; return (-not $PSVarable -or $PSVarable.Value) } +function IsLinux { $PSVarable = Get-Variable -Name IsLinux -ErrorAction Ignore; return ($PSVarable -and $PSVarable.Value) } +function IsCore { $PSVarable = Get-Variable -Name IsCore -ErrorAction Ignore; return ($PSVarable -and $PSVarable.Value) } -if($IsWindows) +if(IsWindows) { $script:ProgramFilesPSPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramFiles -ChildPath "WindowsPowerShell" } @@ -24,7 +27,7 @@ else $script:ProgramFilesPSPath = $PSHome } -if($IsWindows) +if(IsWindows) { try { @@ -46,7 +49,7 @@ if($IsWindows) } else { - $script:MyDocumentsPSPath = Microsoft.PowerShell.Management\Join-Path -Path $HOME -ChildPath ".local/share/PowerShell" + $script:MyDocumentsPSPath = Microsoft.PowerShell.Management\Join-Path -Path $HOME -ChildPath ".local/share/powershell" } $script:ProgramFilesModulesPath = Microsoft.PowerShell.Management\Join-Path -Path $script:ProgramFilesPSPath -ChildPath "Modules" @@ -56,18 +59,18 @@ $script:ProgramFilesScriptsPath = Microsoft.PowerShell.Management\Join-Path -Pat $script:MyDocumentsScriptsPath = Microsoft.PowerShell.Management\Join-Path -Path $script:MyDocumentsPSPath -ChildPath "Scripts" -$script:TempPath = if($IsWindows){ ([System.IO.DirectoryInfo]$env:TEMP).FullName } else { '/tmp' } +$script:TempPath = if(IsWindows){ ([System.IO.DirectoryInfo]$env:TEMP).FullName } else { '/tmp' } $script:PSGetItemInfoFileName = "PSGetModuleInfo.xml" -if($IsWindows) +if(IsWindows) { $script:PSGetProgramDataPath = Microsoft.PowerShell.Management\Join-Path -Path $env:ProgramData -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\' $script:PSGetAppLocalPath = Microsoft.PowerShell.Management\Join-Path -Path $env:LOCALAPPDATA -ChildPath 'Microsoft\Windows\PowerShell\PowerShellGet\' } else { - $script:PSGetProgramDataPath = "$HOME/.config/powershell/PowerShellGet" #TODO: Get $env:ProgramData equivalent - $script:PSGetAppLocalPath = "$HOME/.config/powershell/PowerShellGet" + $script:PSGetProgramDataPath = "$HOME/.config/powershell/powershellget" #TODO: Get $env:ProgramData equivalent + $script:PSGetAppLocalPath = "$HOME/.config/powershell/powershellget" } $script:PSGetModuleSourcesFilePath = Microsoft.PowerShell.Management\Join-Path -Path $script:PSGetAppLocalPath -ChildPath "PSRepositories.xml" @@ -114,8 +117,8 @@ $script:NuGetProviderVersion = [Version]'2.8.5.201' $script:SupportsPSModulesFeatureName="supports-powershell-modules" $script:FastPackRefHastable = @{} -$script:NuGetBinaryProgramDataPath=if($IsWindows) {"$env:ProgramFiles\PackageManagement\ProviderAssemblies"} -$script:NuGetBinaryLocalAppDataPath=if($IsWindows) {"$env:LOCALAPPDATA\PackageManagement\ProviderAssemblies"} +$script:NuGetBinaryProgramDataPath=if(IsWindows) {"$env:ProgramFiles\PackageManagement\ProviderAssemblies"} +$script:NuGetBinaryLocalAppDataPath=if(IsWindows) {"$env:LOCALAPPDATA\PackageManagement\ProviderAssemblies"} # go fwlink for 'https://nuget.org/nuget.exe' $script:NuGetClientSourceURL = 'http://go.microsoft.com/fwlink/?LinkID=690216&clcid=0x409' $script:NuGetExeName = 'NuGet.exe' @@ -602,7 +605,7 @@ catch # Ignore the error and try adding the type below } -if(-not $script:TelemetryEnabled -and $IsWindows) +if(-not $script:TelemetryEnabled -and (IsWindows)) { try { @@ -707,7 +710,7 @@ function Publish-Module Begin { - if($script:isNanoServer -or $IsCore) { + if($script:isNanoServer -or (IsCore)) { $message = $LocalizedData.PublishPSArtifactUnsupportedOnNano -f "Module" ThrowError -ExceptionName "System.InvalidOperationException" ` -ExceptionMessage $message ` @@ -869,7 +872,7 @@ function Publish-Module } else { - $resolvedPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 + $resolvedPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $resolvedPath -or -not (Microsoft.PowerShell.Management\Test-Path -Path $resolvedPath -PathType Container)) @@ -1059,7 +1062,7 @@ function Publish-Module # Use Find-Script to check if that name is already used as scriptname $scriptPSGetItemInfo = Find-Script @FindParameters | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $moduleName} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if($scriptPSGetItemInfo) { $message = $LocalizedData.SpecifiedNameIsAlearyUsed -f ($moduleName, $Repository, 'Find-Script') @@ -1074,7 +1077,7 @@ function Publish-Module $null = $FindParameters.Remove('Tag') $currentPSGetItemInfo = Find-Module @FindParameters | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $moduleInfo.Name} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if($currentPSGetItemInfo) { @@ -1412,7 +1415,7 @@ function Save-Module { if($Path) { - $destinationPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 + $destinationPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-path $destinationPath)) { @@ -1429,7 +1432,7 @@ function Save-Module } else { - $destinationPath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 + $destinationPath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $destinationPath)) { @@ -1878,7 +1881,7 @@ function Update-Module if(-not $installedPackages -and -not (Test-WildcardPattern -Name $moduleName)) { - $availableModules = Get-Module -ListAvailable $moduleName -Verbose:$false | Microsoft.PowerShell.Utility\Select-Object -Unique + $availableModules = Get-Module -ListAvailable $moduleName -Verbose:$false | Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore if(-not $availableModules) { @@ -2506,7 +2509,7 @@ function Publish-Script Begin { - if($script:isNanoServer -or $IsCore) { + if($script:isNanoServer -or (IsCore)) { $message = $LocalizedData.PublishPSArtifactUnsupportedOnNano -f "Script" ThrowError -ExceptionName "System.InvalidOperationException" ` -ExceptionMessage $message ` @@ -2527,7 +2530,7 @@ function Publish-Script if($Path) { $scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -Path $scriptFilePath -PathType Leaf)) @@ -2544,7 +2547,7 @@ function Publish-Script else { $scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $scriptFilePath -PathType Leaf)) @@ -2698,7 +2701,7 @@ function Publish-Script # Use Find-Module to check if that name is already used as module name $modulePSGetItemInfo = Find-Module @FindParameters | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $scriptName} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if($modulePSGetItemInfo) { $message = $LocalizedData.SpecifiedNameIsAlearyUsed -f ($scriptName, $Repository, 'Find-Module') @@ -2715,7 +2718,7 @@ function Publish-Script $currentPSGetItemInfo = $null $currentPSGetItemInfo = Find-Script @FindParameters | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $scriptName} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if($currentPSGetItemInfo) { @@ -3074,7 +3077,7 @@ function Save-Script if($Path) { $destinationPath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-path $destinationPath)) { @@ -3092,7 +3095,7 @@ function Save-Script else { $destinationPath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $destinationPath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $destinationPath)) { @@ -4459,7 +4462,7 @@ function Test-ScriptFileInfo $scriptFilePath = $null if($Path) { - $scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 + $scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -Path $scriptFilePath -PathType Leaf)) { @@ -4475,7 +4478,7 @@ function Test-ScriptFileInfo } else { - $scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 + $scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $scriptFilePath -PathType Leaf)) { @@ -4532,7 +4535,7 @@ function Test-ScriptFileInfo $psscriptInfoComments = $CommentTokens | Microsoft.PowerShell.Core\Where-Object { $_.Extent.Text -match "<#PSScriptInfo" } | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $psscriptInfoComments) { @@ -4721,20 +4724,20 @@ function Test-ScriptFileInfo if($allCommands) { - $allCommandNames = $allCommands | ForEach-Object {$_.Name} | Select-Object -Unique + $allCommandNames = $allCommands | ForEach-Object {$_.Name} | Select-Object -Unique -ErrorAction Ignore ValidateAndAdd-PSScriptInfoEntry -PSScriptInfo $PSScriptInfo ` -PropertyName $script:DefinedCommands ` -PropertyValue $allCommandNames ` -CallerPSCmdlet $PSCmdlet - $allFunctionNames = $allCommands | Where-Object {-not $_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique + $allFunctionNames = $allCommands | Where-Object {-not $_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique -ErrorAction Ignore ValidateAndAdd-PSScriptInfoEntry -PSScriptInfo $PSScriptInfo ` -PropertyName $script:DefinedFunctions ` -PropertyValue $allFunctionNames ` -CallerPSCmdlet $PSCmdlet - $allWorkflowNames = $allCommands | Where-Object {$_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique + $allWorkflowNames = $allCommands | Where-Object {$_.IsWorkflow} | ForEach-Object {$_.Name} | Select-Object -Unique -ErrorAction Ignore ValidateAndAdd-PSScriptInfoEntry -PSScriptInfo $PSScriptInfo ` -PropertyName $script:DefinedWorkflows ` -PropertyValue $allWorkflowNames ` @@ -5110,7 +5113,7 @@ function Update-ScriptFileInfo if($Path) { $scriptFilePath = Resolve-PathHelper -Path $Path -CallerPSCmdlet $PSCmdlet | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -Path $scriptFilePath -PathType Leaf)) @@ -5127,7 +5130,7 @@ function Update-ScriptFileInfo else { $scriptFilePath = Resolve-PathHelper -Path $LiteralPath -IsLiteralPath -CallerPSCmdlet $PSCmdlet | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $scriptFilePath -or -not (Microsoft.PowerShell.Management\Test-Path -LiteralPath $scriptFilePath -PathType Leaf)) @@ -5380,7 +5383,7 @@ function Update-ScriptFileInfo $psscriptInfoComments = $CommentTokens | Microsoft.PowerShell.Core\Where-Object { $_.Extent.Text -match "<#PSScriptInfo" } | - Microsoft.PowerShell.Utility\Select-Object -First 1 + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $psscriptInfoComments) { @@ -6150,7 +6153,7 @@ function Ping-Endpoint $results = @{} $WebProxy = $null - if($Proxy -and $IsWindows) + if($Proxy -and (IsWindows)) { $ProxyNetworkCredential = $null if($ProxyCredential) @@ -6380,7 +6383,7 @@ function ValidateAndSet-PATHVariableIfUserAccepts $Request ) - if(-not $IsWindows) + if(-not (IsWindows)) { return } @@ -7180,7 +7183,7 @@ function Install-NuGetClientBinaries $Force ) - if(-not $IsWindows -or + if(-not (IsWindows) -or ($script:NuGetProvider -and (-not $BootstrapNuGetExe -or ($script:NuGetExePath -and (Microsoft.PowerShell.Management\Test-Path -Path $script:NuGetExePath))))) @@ -7267,7 +7270,7 @@ function Install-NuGetClientBinaries $_.Path -and ((Microsoft.PowerShell.Management\Split-Path -Path $_.Path -Leaf) -eq $script:NuGetExeName) -and (-not $_.Path.StartsWith($env:windir, [System.StringComparison]::OrdinalIgnoreCase)) - } | Microsoft.PowerShell.Utility\Select-Object -First 1 + } | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if($nugetCmd -and $nugetCmd.Path) { @@ -7283,7 +7286,7 @@ function Install-NuGetClientBinaries } # On Nano server we don't need NuGet.exe - if(-not $bootstrapNuGetProvider -and ($script:isNanoServer -or $IsCore -or -not $BootstrapNuGetExe)) + if(-not $bootstrapNuGetProvider -and ($script:isNanoServer -or (IsCore) -or -not $BootstrapNuGetExe)) { return } @@ -7340,7 +7343,7 @@ function Install-NuGetClientBinaries } } - if($BootstrapNuGetExe -and -not $script:isNanoServer -and -not $IsCore) + if($BootstrapNuGetExe -and -not $script:isNanoServer -and -not (IsCore)) { Write-Verbose -Message $LocalizedData.DownloadingNugetExe @@ -7424,14 +7427,14 @@ function Test-RunningAsElevated [OutputType([bool])] Param() - if($IsWindows) + if(IsWindows) { $wid=[System.Security.Principal.WindowsIdentity]::GetCurrent() $prp=new-object System.Security.Principal.WindowsPrincipal($wid) $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator return $prp.IsInRole($adm) } - elseif($IsLinux) + elseif(IsLinux) { return ($env:SUDO_UID -eq '1000') } @@ -7522,7 +7525,7 @@ function ValidateAndGet-ScriptDependencies $psgetItemInfo = Find-Module @FindModuleArguments | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $ModuleName} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if(-not $psgetItemInfo) { @@ -7565,7 +7568,7 @@ function ValidateAndGet-ScriptDependencies $psgetItemInfo = Find-Script @FindScriptArguments | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $requiredScript} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if(-not $psgetItemInfo) { @@ -7692,7 +7695,7 @@ function ValidateAndGet-RequiredModuleDetails $psgetItemInfo = Find-Module @FindModuleArguments | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $ModuleName} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if(-not $psgetItemInfo) { @@ -7736,7 +7739,7 @@ function ValidateAndGet-RequiredModuleDetails $psgetItemInfo = Find-Module @FindModuleArguments | Microsoft.PowerShell.Core\Where-Object {$_.Name -eq $ModuleName} | - Microsoft.PowerShell.Utility\Select-Object -Last 1 + Microsoft.PowerShell.Utility\Select-Object -Last 1 -ErrorAction Ignore if(-not $psgetItemInfo) { @@ -9518,7 +9521,7 @@ function Find-Package if($options.ContainsKey($script:Tag)) { - $userSpecifiedTags = $options[$script:Tag] | Microsoft.PowerShell.Utility\Select-Object -Unique + $userSpecifiedTags = $options[$script:Tag] | Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore } else { @@ -9529,7 +9532,7 @@ function Find-Package if($options.ContainsKey('DscResource')) { $specifiedDscResources = $options['DscResource'] | - Microsoft.PowerShell.Utility\Select-Object -Unique | + Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore | Microsoft.PowerShell.Core\ForEach-Object {"$($script:DscResource)_$_"} } @@ -9537,7 +9540,7 @@ function Find-Package if($options.ContainsKey('RoleCapability')) { $specifiedRoleCapabilities = $options['RoleCapability'] | - Microsoft.PowerShell.Utility\Select-Object -Unique | + Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore | Microsoft.PowerShell.Core\ForEach-Object {"$($script:RoleCapability)_$_"} } @@ -9545,7 +9548,7 @@ function Find-Package if($options.ContainsKey('Command')) { $specifiedCommands = $options['Command'] | - Microsoft.PowerShell.Utility\Select-Object -Unique | + Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore | Microsoft.PowerShell.Core\ForEach-Object {"$($script:Command)_$_"} } @@ -9553,7 +9556,7 @@ function Find-Package if($options.ContainsKey('Includes')) { $includes = $options['Includes'] | - Microsoft.PowerShell.Utility\Select-Object -Unique | + Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore | Microsoft.PowerShell.Core\ForEach-Object {"$($script:Includes)_$_"} # Add PSIncludes_DscResource to $specifiedIncludes iff -DscResource names are not specified @@ -10468,7 +10471,7 @@ function Install-PackageUtility } } - $InstalledItemsList | Select-Object -Unique + $InstalledItemsList | Select-Object -Unique -ErrorAction Ignore if($Debug) { @@ -10554,11 +10557,11 @@ function Install-PackageUtility $InstalledItemDetails = $null if($packageType -eq $script:PSArtifactTypeModule) { - $InstalledItemDetails = Get-InstalledModuleDetails -Name $pkg.Name | Select-Object -Last 1 + $InstalledItemDetails = Get-InstalledModuleDetails -Name $pkg.Name | Select-Object -Last 1 -ErrorAction Ignore } elseif($packageType -eq $script:PSArtifactTypeScript) { - $InstalledItemDetails = Get-InstalledScriptDetails -Name $pkg.Name | Select-Object -Last 1 + $InstalledItemDetails = Get-InstalledScriptDetails -Name $pkg.Name | Select-Object -Last 1 -ErrorAction Ignore } if($InstalledItemDetails -and @@ -10983,7 +10986,7 @@ function Uninstall-Package if(-not $Force -and $dependentModules) { - $message = $LocalizedData.UnableToUninstallAsOtherModulesNeedThisModule -f ($moduleName, $version, $moduleBase, $(($dependentModules.Name | Select-Object -Unique) -join ','), $moduleName) + $message = $LocalizedData.UnableToUninstallAsOtherModulesNeedThisModule -f ($moduleName, $version, $moduleBase, $(($dependentModules.Name | Select-Object -Unique -ErrorAction Ignore) -join ','), $moduleName) ThrowError -ExceptionName "System.InvalidOperationException" ` -ExceptionMessage $message ` @@ -11129,7 +11132,7 @@ function Uninstall-Package ($scriptName, $version, $scriptBase, - $(($dependentScriptNames | Select-Object -Unique) -join ','), + $(($dependentScriptNames | Select-Object -Unique -ErrorAction Ignore) -join ','), $scriptName) ThrowError -ExceptionName 'System.InvalidOperationException' ` @@ -11674,11 +11677,20 @@ function Set-InstalledModulesVariable foreach ($location in $modulePaths) { # find all modules installed using PowerShellGet - $moduleBases = Get-ChildItem $location -Recurse ` - -Attributes Hidden -Filter $script:PSGetItemInfoFileName ` - -ErrorAction SilentlyContinue ` - -WarningAction SilentlyContinue ` - | Foreach-Object { $_.Directory } + $GetChildItemParams = @{ + Path = $location + Recurse = $true + Filter = $script:PSGetItemInfoFileName + ErrorAction = 'SilentlyContinue' + WarningAction = 'SilentlyContinue' + } + + if(IsWindows) + { + $GetChildItemParams['Attributes'] = 'Hidden' + } + + $moduleBases = Get-ChildItem @GetChildItemParams | Foreach-Object { $_.Directory } foreach ($moduleBase in $moduleBases) @@ -12206,7 +12218,7 @@ function Test-ModuleInstalled # Check if module is already installed $availableModule = Microsoft.PowerShell.Core\Get-Module -ListAvailable -Name $Name -Verbose:$false | Microsoft.PowerShell.Core\Where-Object {-not (Test-ModuleSxSVersionSupport) -or -not $RequiredVersion -or ($RequiredVersion -eq $_.Version)} | - Microsoft.PowerShell.Utility\Select-Object -Unique + Microsoft.PowerShell.Utility\Select-Object -Unique -ErrorAction Ignore return $availableModule } @@ -12267,7 +12279,7 @@ function Test-ScriptInstalled $scriptInfo = $scriptInfos | Microsoft.PowerShell.Core\Where-Object { (-not $RequiredVersion) -or ($RequiredVersion -eq $_.Version) - } | Microsoft.PowerShell.Utility\Select-Object -First 1 + } | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore return $scriptInfo } @@ -13860,7 +13872,7 @@ function Validate-ModuleCommandAlreadyAvailable -WarningAction SilentlyContinue | Microsoft.PowerShell.Core\Where-Object { ($CommandNames -contains $_.Name) -and ($_.Source -ne $CurrentModuleInfo.Name) } | - Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction SilentlyContinue + Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if($AvailableCommand) { $message = $LocalizedData.ModuleCommandAlreadyAvailable -f ($AvailableCommand.Name, $CurrentModuleInfo.Name) @@ -14035,11 +14047,11 @@ function Get-InstalledModuleAuthenticodeSignature $SourceModule = $AvailableModules | Microsoft.PowerShell.Core\Where-Object { $_.ModuleBase.StartsWith($InstallLocation, [System.StringComparison]::OrdinalIgnoreCase) - } | Microsoft.PowerShell.Utility\Select-Object -First 1 + } | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore if(-not $SourceModule) { - $SourceModule = $AvailableModules | Microsoft.PowerShell.Utility\Select-Object -First 1 + $SourceModule = $AvailableModules | Microsoft.PowerShell.Utility\Select-Object -First 1 -ErrorAction Ignore } else { @@ -14162,7 +14174,7 @@ function Test-ValidManifestModule -CallerPSCmdlet $PSCmdlet ` -ErrorCategory InvalidOperation } - elseif($IsWindows) + elseif(IsWindows) { $ValidationResult = Validate-ModuleAuthenticodeSignature -CurrentModuleInfo $PSModuleInfo ` -InstallLocation $InstallLocation ` From bb4eadba1d55eaf890ed9928da2fb4ce5e787f09 Mon Sep 17 00:00:00 2001 From: Manikyam Bavandla Date: Wed, 13 Jul 2016 12:57:05 -0700 Subject: [PATCH 4/4] Corrected a typo in $PSVariable Corrected a typo in $PSVariable --- src/Modules/Shared/PowerShellGet/PSModule.psm1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Modules/Shared/PowerShellGet/PSModule.psm1 b/src/Modules/Shared/PowerShellGet/PSModule.psm1 index 33f01dbcc5..5d1804eb6e 100644 --- a/src/Modules/Shared/PowerShellGet/PSModule.psm1 +++ b/src/Modules/Shared/PowerShellGet/PSModule.psm1 @@ -14,9 +14,9 @@ Microsoft.PowerShell.Core\Set-StrictMode -Version Latest # Check if this is nano server. [System.Runtime.Loader.AssemblyLoadContext] is only available on NanoServer $script:isNanoServer = $null -ne ('System.Runtime.Loader.AssemblyLoadContext' -as [Type]) -function IsWindows { $PSVarable = Get-Variable -Name IsWindows -ErrorAction Ignore; return (-not $PSVarable -or $PSVarable.Value) } -function IsLinux { $PSVarable = Get-Variable -Name IsLinux -ErrorAction Ignore; return ($PSVarable -and $PSVarable.Value) } -function IsCore { $PSVarable = Get-Variable -Name IsCore -ErrorAction Ignore; return ($PSVarable -and $PSVarable.Value) } +function IsWindows { $PSVariable = Get-Variable -Name IsWindows -ErrorAction Ignore; return (-not $PSVariable -or $PSVariable.Value) } +function IsLinux { $PSVariable = Get-Variable -Name IsLinux -ErrorAction Ignore; return ($PSVariable -and $PSVariable.Value) } +function IsCore { $PSVariable = Get-Variable -Name IsCore -ErrorAction Ignore; return ($PSVariable -and $PSVariable.Value) } if(IsWindows) {