Merge pull request #156 from kmruddy/master
Add PowerCLI_FixNestedFolders.ps1
This commit is contained in:
96
Scripts/PowerCLI_FixNestedFolders.ps1
Normal file
96
Scripts/PowerCLI_FixNestedFolders.ps1
Normal file
@@ -0,0 +1,96 @@
|
||||
<#
|
||||
Script name: PowerCLI_FixNestedFolders.ps1
|
||||
Created on: 01/11/2018
|
||||
Author: Kyle Ruddy, @kmruddy, thatcouldbeaproblem.com
|
||||
Description: The purpose of the script is to remove the nested Version based folders when using Powercli on systems using older versions of PowerShell
|
||||
Dependencies: None known
|
||||
|
||||
===Tested Against Environment====
|
||||
PowerCLI Version: PowerCLI 6.5.4
|
||||
PowerShell Version: 5.1, 4.0
|
||||
OS Version: Server 2016, Server 2012 R2
|
||||
#>
|
||||
|
||||
# Variable used to store where the PowerCLI module folders exist
|
||||
$pcliFolder = @()
|
||||
|
||||
# Variable used to store the current PSModulePath locations
|
||||
$downloadDir = $env:PSModulePath.Split(';')
|
||||
|
||||
# Loop to detect PowerCLI module folders in any of the PSModulePath locations
|
||||
foreach ($possPath in $downloadDir) {
|
||||
|
||||
# Verifying the PSModulePath location exists
|
||||
if ((Test-Path -Path $possPath) -eq $true) {
|
||||
|
||||
# Searching for folders with the name of 'VMware.*'
|
||||
$tempFolder = Get-ChildItem -Path $possPath -Name "VMware.*"
|
||||
|
||||
# If a VMware.* module folder is found, the full path is added to the pcliFolder variable
|
||||
if ($tempFolder) {
|
||||
|
||||
foreach ($moduleName in $tempFolder) {
|
||||
$pcliFolder += $possPath + "\" + $moduleName
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
# Verifying that there were PowerCLI module folders found
|
||||
if ($pcliFolder) {
|
||||
|
||||
# Looping through each of the found PowerCLI module folders
|
||||
foreach ($dir in $pcliFolder) {
|
||||
|
||||
# Variable to be used if there are several PowerCLI module versions available
|
||||
$historicDir = $null
|
||||
|
||||
# Varibale used to store the PowerCLI module version folder
|
||||
$tempDir = Get-ChildItem -Path $dir
|
||||
|
||||
# Verifying whether or not there are several PowerCLI module versions available by checking for a type of 'array'
|
||||
if ($tempDir -is [array]) {
|
||||
|
||||
# Variable used to store the current folder structure
|
||||
$historicDir = $tempDir
|
||||
# Updating the tempDir variable to only contain the newest PowerCLI module version folder
|
||||
$tempDir = $tempDir | Sort-Object Name -Descending | select-Object -First 1
|
||||
|
||||
}
|
||||
|
||||
# Verifying the child item is indeed a folder
|
||||
if ($tempDir.GetType().Name -eq "DirectoryInfo") {
|
||||
|
||||
# Obtaining the child objects of the PowerCLI module version folder and copying them to the parent folder
|
||||
$tempDir | Get-ChildItem | Copy-Item -Destination $dir -ErrorAction Stop
|
||||
|
||||
# Checking for any nested folders within the PowerCLI module version folder
|
||||
if ($tempDir | Get-ChildItem -Directory) {
|
||||
|
||||
# Obtaining and storing the child items to a variable, then copying the items to the parent folder's nested folder
|
||||
$nestFolder = $tempDir | Get-ChildItem -Directory
|
||||
foreach ($nestDir in $nestFolder) {
|
||||
$nestDir | Get-ChildItem | Copy-Item -Destination ($dir + "\" + $nestDir.Name) -ErrorAction Stop
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# Detecting whether the historicDir variable was used
|
||||
if ($historicDir) {
|
||||
|
||||
# Removing any of the former, no longer needed, directory structure
|
||||
$historicDir | Remove-Item -Recurse -Force
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
# Removing any of the former, no longer needed, directory structure
|
||||
$tempDir | Remove-Item -Recurse -Force
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else {Write-Host 'No PowerCLI module folders founds in the $PSModulePath directories.'}
|
||||
Reference in New Issue
Block a user