Name Gender Age Culture -------------------- Microsoft Zira Desktop Female Adult en-US Microsoft David Desktop Male Adult en-US Microsoft Hedda Desktop Female Adult de-DE
$sampleText = @{ [System.Globalization.CultureInfo]::GetCultureInfo("en-us") = "Hello, I am speaking English! I am " [System.Globalization.CultureInfo]::GetCultureInfo("de-de") = "Halli Hallo, man spricht deutsch hier! Ich bin " [System.Globalization.CultureInfo]::GetCultureInfo("es-es") = "Una cerveza por favor! Soy " [System.Globalization.CultureInfo]::GetCultureInfo("fr-fr") = "Vive la france! Je suis " [System.Globalization.CultureInfo]::GetCultureInfo("it-it") = "Il mio hovercraft è pieno di anguille! Lo sono "
Add-Type-AssemblyName System.Speech $synthesizer = New-Object System.Speech.Synthesis.SpeechSynthesizer $synthesizer.SetOutputToWaveFile($Path) $synthesizer.Rate = -10 $synthesizer.Speak('Uh, I am not feeling that well!') $synthesizer.SetOutputToDefaultAudioDevice()
# run the WAV file (you can also double-click the file on your desktop!) Invoke-Item-Path$Path
Add-Type-AssemblyName System.speech $synthesizer = New-Object System.Speech.Synthesis.SpeechSynthesizer $synthesizer.Speak('Hello! I am your computer!')
请注意 Windows 10 自带了本地化的文字转语音引擎,所以如果您的 Windows 不是使用英语语言,您可能需要将以上文字转为您的语言。
可以用一系列属性来调整输出的效果。请试试这段代码:
1 2 3 4
Add-Type-AssemblyName System.speech $synthesizer = New-Object System.Speech.Synthesis.SpeechSynthesizer $synthesizer.Rate = -10 $synthesizer.Speak('Uh, I am not feeling that well!')
begin { # use this to collect computer names that were sent via pipeline [Collections.ArrayList]$bucket = @()
# hash table with error code to text translation $StatusCode_ReturnValue = @{ 0='Success' 11001='Buffer Too Small' 11002='Destination Net Unreachable' 11003='Destination Host Unreachable' 11004='Destination Protocol Unreachable' 11005='Destination Port Unreachable' 11006='No Resources' 11007='Bad Option' 11008='Hardware Error' 11009='Packet Too Big' 11010='Request Timed Out' 11011='Bad Request' 11012='Bad Route' 11013='TimeToLive Expired Transit' 11014='TimeToLive Expired Reassembly' 11015='Parameter Problem' 11016='Source Quench' 11017='Option Too Big' 11018='Bad Destination' 11032='Negotiating IPSEC' 11050='General Failure' }
# hash table with calculated property that translates # numeric return value into friendly text
$statusFriendlyText = @{ # name of column Name = 'Status' # code to calculate content of column Expression = { # take status code and use it as index into # the hash table with friendly names # make sure the key is of same data type (int) $StatusCode_ReturnValue[([int]$_.StatusCode)] } }
# calculated property that returns $true when status -eq 0 $IsOnline = @{ Name = 'Online' Expression = { $_.StatusCode -eq0 } }
# do DNS resolution when system responds to ping $DNSName = @{ Name = 'DNSName' Expression = { if ($_.StatusCode -eq0) { if ($_.Address -like'*.*.*.*') { [Net.DNS]::GetHostByAddress($_.Address).HostName } else { [Net.DNS]::GetHostByName($_.Address).HostName } } } } }
process { # add each computer name to the bucket # we either receive a string array via parameter, or # the process block runs multiple times when computer # names are piped $ComputerName | ForEach-Object { $null = $bucket.Add($_) } }
end { # convert list of computers into a WMI query string $query = $bucket-join"' or Address='"
begin { # use this to collect computer names that were sent via pipeline [Collections.ArrayList]$bucket = @()
# hash table with error code to text translation $StatusCode_ReturnValue = @{ 0='Success' 11001='Buffer Too Small' 11002='Destination Net Unreachable' 11003='Destination Host Unreachable' 11004='Destination Protocol Unreachable' 11005='Destination Port Unreachable' 11006='No Resources' 11007='Bad Option' 11008='Hardware Error' 11009='Packet Too Big' 11010='Request Timed Out' 11011='Bad Request' 11012='Bad Route' 11013='TimeToLive Expired Transit' 11014='TimeToLive Expired Reassembly' 11015='Parameter Problem' 11016='Source Quench' 11017='Option Too Big' 11018='Bad Destination' 11032='Negotiating IPSEC' 11050='General Failure' }
# hash table with calculated property that translates # numeric return value into friendly text
$statusFriendlyText = @{ # name of column Name = 'Status' # code to calculate content of column Expression = { # take status code and use it as index into # the hash table with friendly names # make sure the key is of same data type (int) $StatusCode_ReturnValue[([int]$_.StatusCode)] } }
# calculated property that returns $true when status -eq 0 $IsOnline = @{ Name = 'Online' Expression = { $_.StatusCode -eq0 } }
# do DNS resolution when system responds to ping $DNSName = @{ Name = 'DNSName' Expression = { if ($_.StatusCode -eq0) { if ($_.Address -like'*.*.*.*') { [Net.DNS]::GetHostByAddress($_.Address).HostName } else { [Net.DNS]::GetHostByName($_.Address).HostName } } } } }
process { # add each computer name to the bucket # we either receive a string array via parameter, or # the process block runs multiple times when computer # names are piped $ComputerName | ForEach-Object { $null = $bucket.Add($_) } }
end { # convert list of computers into a WMI query string $query = $bucket-join"' or Address='"