Skip to content

Commit ee8c8a8

Browse files
authored
Merge pull request #913 from microsoft/fix/#874
Different dependencies based on OS
2 parents 40a3713 + 61c9529 commit ee8c8a8

File tree

3 files changed

+55
-20
lines changed

3 files changed

+55
-20
lines changed

src/powershell/Initialize-Dependencies.ps1

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,30 @@ function Initialize-Dependencies {
9898
$moduleManifest = Import-PowerShellDataFile -Path $ModuleManifestPath -ErrorAction Stop
9999
[Microsoft.PowerShell.Commands.ModuleSpecification[]]$requiredModules = $moduleManifest.RequiredModules
100100
[Microsoft.PowerShell.Commands.ModuleSpecification[]]$externalModuleDependencies = $moduleManifest.PrivateData.ExternalModuleDependencies
101+
102+
[Microsoft.PowerShell.Commands.ModuleSpecification[]]$xPlatPowerShellRequiredModules = @(
103+
@{ModuleName = 'Microsoft.Graph.Authentication'; GUID = '883916f2-9184-46ee-b1f8-b6a2fb784cee'; ModuleVersion = '2.32.0'; },
104+
@{ModuleName = 'Microsoft.Graph.Beta.Teams'; GUID = 'e264919d-7ae2-4a89-ba8b-524bd93ddc08'; ModuleVersion = '2.32.0'; },
105+
@{ModuleName = 'Az.Accounts'; GUID = '17a2feff-488b-47f9-8729-e2cec094624c'; ModuleVersion = '4.0.2'; },
106+
@{ModuleName = 'ExchangeOnlineManagement'; GUID = 'b5eced50-afa4-455b-847a-d8fb64140a22'; RequiredVersion = '3.9.0'; }
107+
)
108+
101109
[Microsoft.PowerShell.Commands.ModuleSpecification[]]$windowsPowerShellRequiredModules = @(
102-
@{ModuleName = 'ExchangeOnlineManagement'; GUID = 'b5eced50-afa4-455b-847a-d8fb64140a22'; RequiredVersion = '3.9.0'; }, # Works on PS7
103110
@{ModuleName = 'Microsoft.Online.SharePoint.PowerShell'; GUID = 'adedde5f-e77b-4682-ab3d-a4cb4ff79b83'; ModuleVersion = '16.0.26914.12004'; },
104111
@{ModuleName = 'AipService'; GUID = 'e338ccc0-3333-4479-87fe-66382d33782d'; ModuleVersion = '3.0.0.1'; }
105-
) #TODO: This needs a fix in the build process.
112+
)
106113

107-
$allModuleDependencies = @($requiredModules) + @($externalModuleDependencies) + @($windowsPowerShellRequiredModules)
108-
$requiredModuleToSave = $requiredModules.Where{$_.Name -notin $externalModuleDependencies.Name}
109-
$requiredModuleToSave += $windowsPowerShellRequiredModules.Where{ $_.Name -notin $requiredModules.Name -and $_.Name -notin $externalModuleDependencies.Name }
114+
#region Build list of RequiredModule based on OS
115+
[Microsoft.PowerShell.Commands.ModuleSpecification[]]$allModuleDependencies = $requiredModules + $xPlatPowerShellRequiredModules
116+
if ($IsWindows) {
117+
$allModuleDependencies += $windowsPowerShellRequiredModules.Where({
118+
$_.Name -notin $allModuleDependencies.Name
119+
})
120+
}
121+
122+
[Microsoft.PowerShell.Commands.ModuleSpecification[]]$requiredModuleToSave = $allModuleDependencies.Where{
123+
$_.Name -notin $externalModuleDependencies.Name
124+
}
110125
#endregion
111126

112127
if ($IsMacOS -or $IsLinux)
@@ -122,7 +137,7 @@ function Initialize-Dependencies {
122137
elseif (-not $SkipModuleInstallation.IsPresent)
123138
{
124139
Write-Host -Object "`r`n"
125-
Write-Host -Object 'Resolving dependencies...' -ForegroundColor Green
140+
Write-Host -Object ('Resolving {0} dependencies...' -f $allModuleDependencies.Count) -ForegroundColor Green
126141

127142
$saveModuleCmdParams = @{
128143
Path = $RequiredModulesPath
@@ -160,18 +175,36 @@ function Initialize-Dependencies {
160175

161176
try
162177
{
163-
$saveModuleCmdParamsClone['Name'] = $moduleSpec.Name
164-
if ($moduleSpec.Version -and $saveModuleCmd.Name -eq 'Save-Module')
178+
if ($saveModuleCmd.Name -eq 'Save-PSResource')
165179
{
166-
$saveModuleCmdParamsClone['MinimumVersion'] = $moduleSpec.Version
180+
$saveModuleCmdParamsClone['Name'] = $moduleSpec.Name
181+
# Save-PSResource uses NuGet version range syntax: https://learn.microsoft.com/en-us/nuget/concepts/package-versioning?tabs=semver20sort#version-ranges
182+
if ($moduleSpec.RequiredVersion) {
183+
# Absolute required version
184+
$saveModuleCmdParamsClone['Version'] = '[{0}]' -f $moduleSpec.RequiredVersion
185+
}
186+
elseif ($moduleSpec.MaximumVersion -and $moduleSpec.Version) {
187+
# Minimum and maximum version (exact range) inclusive
188+
$saveModuleCmdParamsClone['Version'] = '[{0},{1}]' -f $moduleSpec.Version, $moduleSpec.MaximumVersion
189+
}
190+
elseif ($moduleSpec.MaximumVersion) {
191+
# Maximum version inclusive
192+
$saveModuleCmdParamsClone['Version'] = '(,{0}]' -f $moduleSpec.MaximumVersion
193+
}
194+
elseif ($moduleSpec.Version) {
195+
# Minimum version inclusive
196+
$saveModuleCmdParamsClone['Version'] = '[{0}, )' -f $moduleSpec.Version
197+
}
198+
199+
$saveModuleCmdParamsClone['PassThru'] = $true
200+
$savedModule = (& $saveModuleCmd @saveModuleCmdParamsClone).Where({ $_.Name -eq $moduleSpec.Name },1)
201+
Write-Host -Object (' ⬇️ Module {0} v{1} saved successfully.' -f $moduleSpec.Name, $savedModule.Version) -ForegroundColor Green
167202
}
168-
elseif ($moduleSpec.Version -and $saveModuleCmd.Name -eq 'Save-PSResource')
203+
elseif ($saveModuleCmd.Name -eq 'Save-Module')
169204
{
170-
$saveModuleCmdParamsClone['Version'] = '[{0}, ]' -f $moduleSpec.Version
205+
$moduleSpec | &$saveModuleCmd @saveModuleCmdParamsClone
206+
Write-Host -Object (' ⬇️ Module {0} saved successfully.' -f $moduleSpec.Name) -ForegroundColor Green
171207
}
172-
173-
& $saveModuleCmd @saveModuleCmdParamsClone
174-
Write-Host -Object (' ⬇️ Module {0} saved successfully.' -f $moduleSpec.Name) -ForegroundColor Green
175208
}
176209
catch
177210
{

src/powershell/ZeroTrustAssessment.psd1

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ PowerShellVersion = '7.0'
5252

5353
# Modules that must be imported into the global environment prior to importing this module
5454
RequiredModules = @(
55-
@{ModuleName = 'Microsoft.Graph.Authentication'; GUID = '883916f2-9184-46ee-b1f8-b6a2fb784cee'; ModuleVersion = '2.32.0'; },
56-
@{ModuleName = 'Microsoft.Graph.Beta.Teams'; GUID = 'e264919d-7ae2-4a89-ba8b-524bd93ddc08'; ModuleVersion = '2.32.0'; },
57-
@{ModuleName = 'Az.Accounts'; GUID = '17a2feff-488b-47f9-8729-e2cec094624c'; ModuleVersion = '4.0.2'; },
5855
@{ModuleName = 'PSFramework'; GUID = '8028b914-132b-431f-baa9-94a6952f21ff'; ModuleVersion = '1.13.419'; }
5956
)
6057

@@ -102,11 +99,17 @@ AliasesToExport = 'Invoke-ZeroTrustAssessment'
10299
PrivateData = @{
103100

104101
WindowsPowerShellRequiredModules = @(
105-
@{ModuleName = 'ExchangeOnlineManagement'; GUID = 'b5eced50-afa4-455b-847a-d8fb64140a22'; ModuleVersion = '3.9.2'; }, # Works on PS7
106102
@{ModuleName = 'Microsoft.Online.SharePoint.PowerShell'; GUID = 'adedde5f-e77b-4682-ab3d-a4cb4ff79b83'; ModuleVersion = '16.0.26914.12004'; },
107103
@{ModuleName = 'AipService'; GUID = 'e338ccc0-3333-4479-87fe-66382d33782d'; ModuleVersion = '3.0.0.1'; }
108104
)
109105

106+
XPlatPowerShellRequiredModules = @(
107+
@{ModuleName = 'Microsoft.Graph.Authentication'; GUID = '883916f2-9184-46ee-b1f8-b6a2fb784cee'; ModuleVersion = '2.32.0'; },
108+
@{ModuleName = 'Microsoft.Graph.Beta.Teams'; GUID = 'e264919d-7ae2-4a89-ba8b-524bd93ddc08'; ModuleVersion = '2.32.0'; },
109+
@{ModuleName = 'Az.Accounts'; GUID = '17a2feff-488b-47f9-8729-e2cec094624c'; ModuleVersion = '4.0.2'; },
110+
@{ModuleName = 'ExchangeOnlineManagement'; GUID = 'b5eced50-afa4-455b-847a-d8fb64140a22'; RequiredVersion = '3.9.0'; }
111+
)
112+
110113
PSData = @{
111114
# Tags applied to this module. These help with module discovery in online galleries.
112115
Tags = 'Microsoft','Security','ZeroTrust','Entra','Intune'

src/powershell/public/Connect-ZtAssessment.ps1

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,13 @@ function Connect-ZtAssessment {
132132
Connect-MgGraph @params -ErrorAction Stop
133133
$contextTenantId = (Get-MgContext).TenantId
134134
}
135-
136135
catch {
137136
Stop-PSFFunction -Message "Failed to authenticate to Graph" -ErrorRecord $_ -EnableException $true -Cmdlet $PSCmdlet
138137
}
139138

140139
try {
141140
Write-Verbose "Verifying Zero Trust context and permissions..."
142-
Test-ZtContext
141+
$null = Test-ZtContext
143142
}
144143
catch {
145144
Stop-PSFFunction -Message "Authenticated to Graph, but the requirements for the ZeroTrustAssessment are not met by the established session:`n$_" -ErrorRecord $_ -EnableException $true -Cmdlet $PSCmdlet

0 commit comments

Comments
 (0)