Update CustomSettings.ini file.
<# | |
.SYNOPSIS | |
Update CustomSettings.ini file. | |
.DESCRIPTION | |
Updates one or more CUstomSettings.ini files with a common value. | |
Calling powershell.exe instance must have read/write privelages to the share. | |
.PARAMETER DeployShares | |
The full path to the share. Can be input from the pipeline | |
Example: | |
c:\DeploymentShare | |
\\localhost\DeploymentShare$ | |
.PARAMETER Section | |
The section name to update. | |
.PARAMETER Name | |
THe name to update | |
.PARAMETER Value | |
The value to write | |
.EXAMPLE | |
C:\PS> .\Update-INIFiles -DeployShares c:\DeploymentShare -Section Default -Name AdminPassword -value 'P@ssw0rd' | |
set a new password in an MDT deployment share | |
.EXAMPLE | |
C:\PS> "\\localhost\DeploymentShare$" | .\Update-INIFiles -Section Default -Name AdminPassword -value 'P@ssw0rd' | |
set a new password in an MDT deployment share, get the file from the pipeline. | |
C:\PS> type .\MyMDTServerList.txt | .\Update-INIFiles -Section Default -Name AdminPassword -value 'P@ssw0rd' | |
set a new password in an MDT deployment share, get the list of files from a list of servers passed in through the cmdline. | |
.EXAMPLE | |
C:\PS> [Reflection.Assembly]::LoadWithPartialName("System.Web") | out-null | |
C:\PS> $NewPassword = [System.Web.Security.Membership]::GeneratePassword(10,2) | |
C:\PS> "The new password will be: $NewPassword" | |
The new password will be: F{nK:*[L}H | |
C:\PS> type .\MyMDTServerList.txt | .\Update-INIFiles -Section Default -Name AdminPassword -value $NewPassword | |
Generate a new random password with powershell, then update all Cs.ini files from a list of servers passed in through the command line. | |
.LINK | |
https://foxdeploy.com/2014/09/04/adding-whatif-support-to-your-scripts-the-right-way-and-how-you-shouldnt-do-it/ | |
#> | |
[cmdletbinding(SupportsShouldProcess=$true)] | |
param( | |
[parameter(Mandatory=$true, ValueFromPipeline=$true)] | |
$DeployShares, | |
[parameter(Mandatory=$true)] | |
[string] $Section, | |
[parameter(Mandatory=$true)] | |
[string] $Name, | |
[parameter(Mandatory=$true)] | |
[string] $Value | |
) | |
begin { | |
## The signature of the Windows API that retrieves INI settings | |
$signature = @' | |
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)] | |
public static extern bool WritePrivateProfileString( | |
string lpAppName, | |
string lpKeyName, | |
string lpString, | |
string lpFileName); | |
[DllImport("Kernel32.dll")] | |
public static extern uint GetLastError(); | |
'@ | |
## Create a new type that lets us access the Windows API function | |
$type = Add-Type -MemberDefinition $signature -Name API -Namespace Win32 -PassThru | |
} | |
process { | |
foreach ( $DPShare in $DeployShares ) { | |
if ($pscmdlet.ShouldProcess("$DPShare", "CustomSettings.ini write")){ | |
$result = [Win32.API]::WritePrivateProfileString($Section, $Name, $Value, "$DPShare\control\customsettings.ini") | |
if ( -not $result ) { | |
$err = [Win32.API]::GetLastError() | |
throw ( New-Object ComponentModel.Win32Exception ($err -as [int]) ) | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment