2016-05-24 2 views
1

Личные уровня квалификации с PS: Low (Student)облицовку() не работает для лицензионного ключа инструмента

Цель: Попытка найти лицензионный ключ для Windows 10, отображать его в окне, а также автоматически скопировать его в буфер обмена.

Вопрос: Мой вывод всегда приводит к пробелам в начале и конце строки. Я попробовал trim(), trimstart() и т. Д. До сих пор ничего не работало. Я бы не прочь так, что пробелы затем сохраняются с ключом в буфер обмена, что делает функциональность бесполезной или, по крайней мере, утомительной.

Я изложил некоторые обозначения в коде, чтобы определить проблему.

Код (результат ниже, а):

Add-Type -AssemblyName System.Windows.Forms 
Add-Type -AssemblyName System.Drawing 
[void][reflection.assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 

#Obtain Windows 10 Key 
$License = wmic path SoftwareLicensingService get OA3xOriginalProductKey 

# FAULT - Used to trim key 
$Result = $License.Trim("OA3xOriginalProductKey") 

#Used to isolate the spaces in the result. Attempt to see if the spaces occur after the trim, or during the trim. 
#The spaces are within the "|" rather than outside of the "|" - meaning that the Trim() is not working properly. 
#PLEASE HELP! 
$Result = "|" + $Result.Trim() + "|" 

#Used to copy key to clipboard 
$Result | clip.exe 


$form = New-Object System.Windows.Forms.Form 
$form.Text = "KeySniffer 1.0" 
$form.Size = New-Object System.Drawing.Size(280,140) 
$form.StartPosition = "CenterScreen" 

$OKButton = New-Object System.Windows.Forms.Button 
$OKButton.Location = New-Object System.Drawing.Point(30,70) 
$OKButton.Size = New-Object System.Drawing.Size(60,23) 
$OKButton.Text = "OK" 
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK 
$form.AcceptButton = $OKButton 
$form.Controls.Add($OKButton) 

$label = New-Object System.Windows.Forms.Label 
$label.Location = New-Object System.Drawing.Point(10,20) 
$label.Size = New-Object System.Drawing.Size(280,20) 
$label.Text = "Key has been copied to clipboard" 
$form.Controls.Add($label) 

$textBox = New-Object System.Windows.Forms.TextBox 
#Put a trim here as a desperate swing in the dark 
#The "-" indicate that the spaces occur within the "$Result" 
$textBox.Text = "-" + $Result.Trim() + "-" 
$textBox.Location = New-Object System.Drawing.Point(10,40) 
$textBox.Size = New-Object System.Drawing.Size(200,20) 
$form.Controls.Add($textBox) 

$form.Topmost = $True 

$form.Add_Shown({$textBox.Select()}) 
$result = $form.ShowDialog() 

if ($result -eq [System.Windows.Forms.DialogResult]::OK) 
{ 
    $x = $textBox.Text 
    $x 
} 



Результат:

-| ****-*****-*****-*****-***** |- 
+0

Вы уверены, что они являются пробелы? Вместо добавления '-' или' | 'посмотреть на фактические символы: $ Result.ToCharArray() | % {"'$ _' = $ ([System.Convert] :: ToUInt32 ($ _))"} ' – xXhRQ8sD2L7Z

ответ

0

Кажется, вы уже вынули текст, который вы не хотите с этим

$Result = $License.Trim("OA3xOriginalProductKey") 

Теперь давайте попробуем только сохранить контент, который мы захотите на вершине его по шаблону, который хранит только числа, символы верхнего регистра и «-». Кроме того, нам нужно удалить лишние строки.

$pattern = '[^0-9A-Z-]' 
$Result = ($Result -replace $pattern, '').trim() -ne "" 

Теперь вы можете проверить результат, все нежелательные должны исчезнуть

$Result = "|" + $Result + "|" 
$Result 
+0

Ах! Это имеет смысл. Не думал, чтобы исследовать способы изолировать то, что я хотел, а не удалять то, что не хотелось. Спасибо, Кай! Я узнал из этого. Cheers Tucker – Tucker

Смежные вопросы