-
Notifications
You must be signed in to change notification settings - Fork 62
Scripts to push the ArcGIS Module
Cameron Kroeker edited this page Nov 19, 2021
·
6 revisions
The following appendices provide sample scripts to handle the ArcGIS module after you've downloaded it to your workstation machine.
Use this batch script to copy the ArcGIS module from your workstation machine to the PSModulePath. (Edit DSC_RESOURCE path)
@echo off
if "%1"=="-h" (
echo The script installs ArcGIS W=Enterprise on the machine using ArcGIS Setups from Fileshare
echo Usage: Prereqs.bat [build #]
echo With no parameters the script uses the latest setups from Fileshare.
exit /b
)
set DSC_RESOURCE="[... Module FileShare Path ...]"
set DSC_RESOURCE_TARGET="C:\Program Files\WindowsPowerShell\Modules\ArcGIS"
if not exist %DSC_RESOURCE_TARGET% (
echo Target path not found.
md %DSC_RESOURCE_TARGET%
)
xcopy %DSC_RESOURCE% %DSC_RESOURCE_TARGET% /E /Y
PowerShell.exe -Command "& Set-ExecutionPolicy RemoteSigned -Force;winrm quickconfig -quiet; "
Use this script to push the ArcGIS module from your workstation to the remote machine. (Pass in a comma-separated list of your remote machines in the Deployment
and ModuleSourcePath
variables on the workstation. If necessary, edit the Version
of the Module
in the script.)
Install-Prereqs.ps1 -ServerMachines [Comma-separated list of all target machines of the configuration] -ModuleSourcePath [module network address or local path] -UseWinRMSSL -Credential [User Credential]
Note: The -UseWinRMSSL and -Credential parameters are required for WinRM HTTPS connections, otherwise it will default to using WinRM HTTP.
Param(
[System.Array]
$ServerMachines,
[System.String]
$ModuleSourcePath,
[Switch]
$UseWinRMSSL,
[Parameter(Mandatory=$False)]
[System.Management.Automation.PSCredential]
$Credential
)
$DSC_TARGET = "Program Files\WindowsPowerShell\Modules\ArcGIS"
if(Test-Path "$($env:SystemDrive)\$DSC_TARGET"){
Remove-Item "$($env:SystemDrive)\$DSC_TARGET" -Force -ErrorAction Ignore -Recurse
}
Write-Host "Copying ArcGIS Module to Local Machine"
Copy-Item -Recurse -Path $ModuleSourcePath -Destination "$($env:SystemDrive)\$DSC_TARGET" -Force
Write-Host "Successfully Copied ArcGIS Module to Local Machine"
if($UseWinRMSSL){
$s = New-PSSession $ServerMachines -UseSSL -Credential $Credential
}else{
$s = New-PSSession $ServerMachines
}
Invoke-Command -Session $s -ScriptBlock {
$DscModulePath = "$($env:SystemDrive)\Program Files\WindowsPowerShell\Modules\ArcGIS"
if(Test-Path $DscModulePath){
Start-Job -Name "DeleteArcGISModule" -ScriptBlock {Remove-Item $args[0] -Force -Recurse} -ArgumentList $DscModulePath
Wait-Job -Name "DeleteArcGISModule"
}
}
workflow ParallelCopyArcGISDSCModule {
param (
[string[]]
$ServerMachineNames,
[System.String]
$ModuleSourcePath
)
foreach -parallel ($machineName in $ServerMachineNames) {
InlineScript {
if(-not($machineName -ieq $env:computername)){
$RD = ((Get-WMIObject -class Win32_OperatingSystem -Computername $using:machineName).SystemDrive)
$RemoteSystemDrive = $RD.trimend(":")
$DSC_TARGET = "Program Files\WindowsPowerShell\Modules\ArcGIS"
$ModulePath = "$RD\$DSC_TARGET"
Write-Host "Copying ArcGIS Module to $using:machineName"
Copy-Item $using:ModuleSourcePath -Destination "\\$using:machineName\$RemoteSystemDrive$\$DSC_TARGET" -Recurse -Force
Write-Host "Successfully Copied ArcGIS Module to $using:machineName"
}
}
}
}
ParallelCopyArcGISDSCModule -ServerMachineNames $ServerMachines -ModuleSourcePath $ModuleSourcePath
Write-Host "Unblocking ArcGIS Module on $ServerMachines"
Invoke-Command -Session $s -Command {
$DscModulePath = "$($env:SystemDrive)\Program Files\WindowsPowerShell\Modules\ArcGIS"
if(Test-Path $DscModulePath){
Start-Job -Name "UnblockArcGISModuleFiles" -ScriptBlock {Get-ChildItem -Path $args[0] -Recurse | Unblock-File} -ArgumentList $DscModulePath
Wait-Job -Name "UnblockArcGISModuleFiles"
}
}
Write-Host "Successfully Unblocked ArcGIS Module files on $ServerMachines"
Remove-PSSession $s