mirror of
https://github.com/PowerShell/PSDscResources
synced 2026-06-21 13:45:29 +00:00
188 lines
4.8 KiB
PowerShell
188 lines
4.8 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Tests if the current machine is a Nano server.
|
|
#>
|
|
function Test-IsNanoServer
|
|
{
|
|
[OutputType([System.Boolean])]
|
|
[CmdletBinding()]
|
|
param ()
|
|
|
|
$serverLevelsRegKey = 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels'
|
|
|
|
if (Test-Path -Path $serverLevelsRegKey)
|
|
{
|
|
$serverLevels = Get-ItemProperty -Path $serverLevelsRegKey
|
|
|
|
if ($serverLevels.NanoServer -eq 1)
|
|
{
|
|
$isNanoServer = $true
|
|
}
|
|
else
|
|
{
|
|
$isNanoServer = $false
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$isNanoServer = $false
|
|
}
|
|
|
|
return $isNanoServer
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Tests whether or not the command with the specified name exists.
|
|
|
|
.PARAMETER Name
|
|
The name of the command to test for.
|
|
#>
|
|
function Test-CommandExists
|
|
{
|
|
[OutputType([System.Boolean])]
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[System.String]
|
|
$Name
|
|
)
|
|
|
|
$command = Get-Command -Name $Name -ErrorAction 'SilentlyContinue'
|
|
return ($null -ne $command)
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Creates and throws an invalid argument exception.
|
|
|
|
.PARAMETER Message
|
|
The message explaining why this error is being thrown.
|
|
|
|
.PARAMETER ArgumentName
|
|
The name of the invalid argument that is causing this error to be thrown.
|
|
#>
|
|
function New-InvalidArgumentException
|
|
{
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[System.String]
|
|
$Message,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[System.String]
|
|
$ArgumentName
|
|
)
|
|
|
|
$argumentException = New-Object -TypeName 'ArgumentException' `
|
|
-ArgumentList @($Message, $ArgumentName)
|
|
$newObjectParams = @{
|
|
TypeName = 'System.Management.Automation.ErrorRecord'
|
|
ArgumentList = @($argumentException, $ArgumentName, 'InvalidArgument', $null)
|
|
}
|
|
$errorRecord = New-Object @newObjectParams
|
|
|
|
throw $errorRecord
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Creates and throws an invalid operation exception.
|
|
|
|
.PARAMETER Message
|
|
The message explaining why this error is being thrown.
|
|
|
|
.PARAMETER ErrorRecord
|
|
The error record containing the exception that is causing this terminating
|
|
error.
|
|
#>
|
|
function New-InvalidOperationException
|
|
{
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter()]
|
|
[ValidateNotNullOrEmpty()]
|
|
[System.String]
|
|
$Message,
|
|
|
|
[Parameter()]
|
|
[ValidateNotNull()]
|
|
[System.Management.Automation.ErrorRecord]
|
|
$ErrorRecord
|
|
)
|
|
|
|
if ($null -eq $Message)
|
|
{
|
|
$invalidOperationException = New-Object -TypeName 'InvalidOperationException'
|
|
}
|
|
elseif ($null -eq $ErrorRecord)
|
|
{
|
|
$invalidOperationException = New-Object -TypeName 'InvalidOperationException' `
|
|
-ArgumentList @( $Message )
|
|
}
|
|
else
|
|
{
|
|
$invalidOperationException = New-Object -TypeName 'InvalidOperationException' `
|
|
-ArgumentList @( $Message, $ErrorRecord.Exception )
|
|
}
|
|
|
|
$newObjectParams = @{
|
|
TypeName = 'System.Management.Automation.ErrorRecord'
|
|
ArgumentList = @( $invalidOperationException.ToString(), 'MachineStateIncorrect', 'InvalidOperation', $null )
|
|
}
|
|
|
|
$errorRecordToThrow = New-Object @newObjectParams
|
|
throw $errorRecordToThrow
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Retrieves the localized string data based on the machine's culture.
|
|
Falls back to en-US strings if the machine's culture is not supported.
|
|
|
|
.PARAMETER ResourceName
|
|
The name of the resource as it appears before '.strings.psd1' of the localized
|
|
string file.
|
|
For example:
|
|
For WindowsOptionalFeature: MSFT_WindowsOptionalFeature
|
|
For Service: MSFT_ServiceResource
|
|
For Registry: MSFT_RegistryResource
|
|
#>
|
|
function Get-LocalizedData
|
|
{
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[System.String]
|
|
$ResourceName
|
|
)
|
|
|
|
$resourceDirectory = Join-Path -Path $PSScriptRoot -ChildPath $ResourceName
|
|
$localizedStringFileLocation = Join-Path -Path $resourceDirectory -ChildPath $PSUICulture
|
|
|
|
if (-not (Test-Path -Path $localizedStringFileLocation))
|
|
{
|
|
# Fallback to en-US
|
|
$localizedStringFileLocation = Join-Path -Path $resourceDirectory -ChildPath 'en-US'
|
|
}
|
|
|
|
Import-LocalizedData `
|
|
-BindingVariable 'localizedData' `
|
|
-FileName "$ResourceName.strings.psd1" `
|
|
-BaseDirectory $localizedStringFileLocation
|
|
|
|
return $localizedData
|
|
}
|
|
|
|
Export-ModuleMember -Function @( 'Test-IsNanoServer', 'New-InvalidArgumentException',
|
|
'New-InvalidOperationException', 'Get-LocalizedData' )
|