diff --git a/research-spoke/main.bicep b/research-spoke/main.bicep index d2ae6f6..0a81ce6 100644 --- a/research-spoke/main.bicep +++ b/research-spoke/main.bicep @@ -649,3 +649,9 @@ output backupPolicyName string = recoveryServicesVaultModule.outputs.backupPolic output diskEncryptionSetId string = diskEncryptionSetModule.outputs.id output computeSubnetId string = networkModule.outputs.createdSubnets.computeSubnet.id output computeResourceGroupName string = computeRg.name +// Double up the \ in the output so it can be pasted easily into a bicepparam file +output shortcutTargetPath string = replace( + '${storageModule.outputs.storageAccountFileShareBaseUncPath}${fileShareNames.shared}', + '\\', + '\\\\' +) diff --git a/research-spoke/spoke-modules/storage/main.bicep b/research-spoke/spoke-modules/storage/main.bicep index 82c428b..0d184f6 100644 --- a/research-spoke/spoke-modules/storage/main.bicep +++ b/research-spoke/spoke-modules/storage/main.bicep @@ -177,3 +177,4 @@ module domainJoinModule 'domainJoin.bicep' = if (domainJoin && length(fileShareN output storageAccountName string = storageAccountModule.outputs.name output storageAccountId string = storageAccountModule.outputs.id +output storageAccountFileShareBaseUncPath string = '\\\\${storageAccountModule.outputs.primaryFileFqdn}\\' diff --git a/research-spoke/spoke-servicemodules/researchvm/deploy.ps1 b/research-spoke/spoke-servicemodules/researchvm/deploy.ps1 index 3f88b2a..a15adc3 100644 --- a/research-spoke/spoke-servicemodules/researchvm/deploy.ps1 +++ b/research-spoke/spoke-servicemodules/researchvm/deploy.ps1 @@ -37,15 +37,19 @@ Param( [Parameter(Mandatory, Position = 4)] [string]$ResourceGroupName, [Parameter(Position = 5)] - [string]$Environment = 'AzureCloud' + [string]$Environment = 'AzureCloud', + [string]$TemplateFile = './main.bicep' ) # Define common parameters for the New-AzDeployment cmdlet [hashtable]$CmdLetParameters = @{ - TemplateFile = './main.bicep' - TemplateParameterFile = $TemplateParameterFile - Location = $Location - ResourceGroupName = $ResourceGroupName + TemplateFile = $TemplateFile + Location = $Location + ResourceGroupName = $ResourceGroupName +} + +if ($TemplateParameterFile) { + $CmdLetParameters.Add('TemplateParameterFile', $TemplateParameterFile) } [string]$WorkloadName = 'researchvm' diff --git a/research-spoke/spoke-servicemodules/researchvm/main.bicep b/research-spoke/spoke-servicemodules/researchvm/main.bicep index 7652205..84c5d92 100644 --- a/research-spoke/spoke-servicemodules/researchvm/main.bicep +++ b/research-spoke/spoke-servicemodules/researchvm/main.bicep @@ -32,6 +32,8 @@ param imageReference imageReferenceType = { version: 'latest' sku: 'win11-23h2-avd-m365' } + +@allowed(['Windows', 'Linux']) param osType string @allowed(['ad', 'entraID']) @@ -45,6 +47,8 @@ param recoveryServicesVaultId string param deploymentTime string = utcNow() +param shortcutTargetPath string = '' + import { activeDirectoryDomainInfo } from '../../../shared-modules/types/activeDirectoryDomainInfo.bicep' import { imageReferenceType } from '../../../shared-modules/types/imageReferenceType.bicep' @@ -103,7 +107,6 @@ module virtualMachinesModule '../../../shared-modules/compute/virtualMachine.bic diskEncryptionSetId: diskEncryptionSetId imageReference: imageReference nicId: nics[i].id - //identityType: logonType == 'entraID' ? 'SystemAssigned' : 'UserAssigned' identityType: 'SystemAssigned' availabilitySetId: vmCount > 1 ? availabilitySet.id : '' deploymentNameStructure: deploymentNameStructure @@ -126,3 +129,24 @@ module virtualMachinesModule '../../../shared-modules/compute/virtualMachine.bic } } ] + +// Create a shortcut on the desktop to the research data file share +resource shortcutExtension 'Microsoft.Compute/virtualMachines/extensions@2023-09-01' = [ + for i in range(0, vmCount): if (!empty(shortcutTargetPath)) { + name: '${vmNames[i]}/CustomScriptExtension' + location: location + tags: tags + properties: { + publisher: 'Microsoft.Compute' + type: 'CustomScriptExtension' + typeHandlerVersion: '1.10' + autoUpgradeMinorVersion: true + settings: { + commandToExecute: 'powershell -ExecutionPolicy Unrestricted ${replace(loadTextContent('../../../scripts/PowerShell/Scripts/RVM/Windows/New-FileShareDesktopShortcut.ps1'), '$TargetPath', shortcutTargetPath)}' + } + } + dependsOn: [ + virtualMachinesModule[i] + ] + } +] diff --git a/scripts/PowerShell/Scripts/RVM/Windows/New-FileShareDesktopShortcut.ps1 b/scripts/PowerShell/Scripts/RVM/Windows/New-FileShareDesktopShortcut.ps1 new file mode 100644 index 0000000..a55d50a --- /dev/null +++ b/scripts/PowerShell/Scripts/RVM/Windows/New-FileShareDesktopShortcut.ps1 @@ -0,0 +1 @@ +$LinkPath = Join-Path ([Environment]::GetFolderPath('CommonDesktopDirectory')) 'Research Data File Share.lnk'; $Link = (New-Object -ComObject WScript.Shell).CreateShortcut($LinkPath); $Link.TargetPath = '$TargetPath'; $Link.Save(); \ No newline at end of file diff --git a/shared-modules/compute/virtualMachine.bicep b/shared-modules/compute/virtualMachine.bicep index d0af034..5a46e1e 100644 --- a/shared-modules/compute/virtualMachine.bicep +++ b/shared-modules/compute/virtualMachine.bicep @@ -27,6 +27,7 @@ param domainJoinInfo activeDirectoryDomainInfo = { @allowed(['ad', 'entraID']) param logonType string +@allowed(['Windows', 'Linux']) param osType string = 'Windows' param intuneEnrollment bool