小编Sta*_*Guy的帖子

PowerShell 与 base64 编码有关的问题

我需要将逗号分隔值数组(.csv)转换为一些 JSON,如下所示:

"traits": {
  "file": {
    "content": "R0lGODlhABAQAIAAAAAAAP///yH7BAEAAAAALAAAAAAEAABAAAIBRAA5",
    "file_name": "test.png"
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下内容:

$traits = New-Object PSObject
$file = New-Object PSObject
$file | Add-Member -Type NoteProperty -Name file_name -Value "file.csv"
$file | Add-Member -Type NoteProperty -Name content -Value $([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes(($domain.GPOs | ConvertTo-Csv))))
$traits | Add-Member -Type NoteProperty -Name group-policies -Value $file
Run Code Online (Sandbox Code Playgroud)

看来“内容”的内容编码不正确。为了排除故障,我将内容复制到www.freeformatter.com/base64-encoder.html,发现它们不匹配。

我缺少什么?

编辑:这是 .csv 的内容。这是我粘贴到https://www.freeformatter.com/base64-encoder.html#ad-output的内容:

#TYPE Selected.System.Xml.XmlElement
"Name","GUID","Linked To","Computer Settings","User Settings"
"Autodiscover - Shared Namespace","249b1923-523a-40b6-9180-cc2727414b9b","@{OU Name=servers; OU Path=domain.local/location/servers; Enabled=true; Enforced=false}","@{Enabled=true; Settings=}","@{Enabled=true; Settings=}"
Run Code Online (Sandbox Code Playgroud)

Powershell 输出如下:

IwBUAFkAUABFACAAUwBlAGwAZQBjAHQAZQBkAC4AUwB5AHMAdABlAG0ALgBYAG0AbAAuAFgAbQBsAEUAbABlAG0AZQBuAHQAIAAiAE4AYQBtAGUAIgAsACIARwBVAEkARAAiACwAIgBMAGkAbgBrAGUAZAAgAFQAbwAiACwAIgBDAG8AbQBwAHUAdABlAHIAIABTAGUAdAB0AGkAbgBnAHMAIgAsACIAVQBzAGUAcgAgAFMAZQB0AHQAaQBuAGcAcwAiACAAIgBBAHUAdABvAGQAaQBzAGMAbwB2AGUAcgAgAC0AIABTAGgAYQByAGUAZAAgAE4AYQBtAGUAcwBwAGEAYwBlACIALAAiADIANAA5AGIAMQA5ADIAMwAtADUAMgAzAGEALQA0ADAAYgA2AC0AOQAxADgAMAAtAGMAYwAyADcAMgA3ADQAMQA0AGIAOQBiACIALAAiAEAAewBPAFUAIABOAGEAbQBlAD0AcwBlAHIAdgBlAHIAcwA7ACAATwBVACAAUABhAHQAaAA9AGQAbwBtAGEAaQBuAC4AbABvAGMAYQBsAC8AbABvAGMAYQB0AGkAbwBuAC8AcwBlAHIAdgBlAHIAcwA7ACAARQBuAGEAYgBsAGUAZAA9AHQAcgB1AGUAOwAgAEUAbgBmAG8AcgBjAGUAZAA9AGYAYQBsAHMAZQB9ACIALAAiAEAAewBFAG4AYQBiAGwAZQBkAD0AdAByAHUAZQA7ACAAUwBlAHQAdABpAG4AZwBzAD0AfQAiACwAIgBAAHsARQBuAGEAYgBsAGUAZAA9AHQAcgB1AGUAOwAgAFMAZQB0AHQAaQBuAGcAcwA9AH0AIgA=
Run Code Online (Sandbox Code Playgroud)

该网站吐出:

I1RZUEUgU2VsZWN0ZWQuU3lzdGVtLlhtbC5YbWxFbGVtZW50DQoiTmFtZSIsIkdVSUQiLCJMaW5rZWQgVG8iLCJDb21wdXRlciBTZXR0aW5ncyIsIlVzZXIgU2V0dGluZ3MiDQoiQXV0b2Rpc2NvdmVyIC0gU2hhcmVkIE5hbWVzcGFjZSIsIjI0OWIxOTIzLTUyM2EtNDBiNi05MTgwLWNjMjcyNzQxNGI5YiIsIkB7T1UgTmFtZT1zZXJ2ZXJzOyBPVSBQYXRoPWRvbWFpbi5sb2NhbC9sb2NhdGlvbi9zZXJ2ZXJzOyBFbmFibGVkPXRydWU7IEVuZm9yY2VkPWZhbHNlfSIsIkB7RW5hYmxlZD10cnVlOyBTZXR0aW5ncz19IiwiQHtFbmFibGVkPXRydWU7IFNldHRpbmdzPX0i
Run Code Online (Sandbox Code Playgroud)

powershell

2
推荐指数
1
解决办法
5222
查看次数

处理密码字符串中的特殊字符

我有一根绳子。有时它看起来像这样:

9xABp'}H9$G(@

虽然,有时它看起来像这样:

9xABp"}H9$G(@

我对用于生成字符串的字符集没有任何控制权,但我需要让 Powershell 停止抱怨无法解析字符串并为我提供所有字符。

$string = '9xABp'}H9$G(@'
$secure = ConvertTo-SecureString -String $string -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我尝试将字符串用双引号而不是单引号括起来。

$string = "9xABp'}H9$G(@"
$secure = ConvertTo-SecureString -String $string -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Run Code Online (Sandbox Code Playgroud)

没关系,但是不包括 $G(用反斜杠替换),当我的字符串内部有双引号时怎么办?

我尝试使用 [Regex]::Escape()。

$string = "9xABp'}H9$G(@"
$secure = ConvertTo-SecureString -String ([Regex]::Escape($string)) -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Run Code Online (Sandbox Code Playgroud)

但$G仍然失踪。另一次尝试,这次在外面加上双引号和单引号。

$string = "'9xABp'}H9$G(@'"
$secure = ConvertTo-SecureString -String ([Regex]::Escape($string)) -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secure)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Run Code Online (Sandbox Code Playgroud)

我在这里能做什么?

powershell

2
推荐指数
1
解决办法
3752
查看次数

使用 PowerShell 和 Selenium 4 等待元素

我正在更新一些以前与 Selenium 3.141 一起使用的 PowerShell 代码。我有以下代码片段:

Add-Type -LiteralPath "$seleniumPath\lib\net48\WebDriver.dll"
Add-Type -LiteralPath "$seleniumPath\lib\net48\WebDriver.Support.dll"
$url = "https://<webpage.com>"
$options = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$options.AddArgument("--disable-gpu")
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($options)
[OpenQA.Selenium.Support.UI.WebDriverWait]$wait = New-Object OpenQA.Selenium.Support.UI.WebDriverWait ($driver, [System.TimeSpan]::FromSeconds(60))

$driver.Navigate().GoToURL($url)
$driver.FindElementById("username")
$wait.Until([OpenQA.Selenium.Support.UI.ExpectedConditions]::ElementExists([OpenQA.Selenium.By]::Id('username')))
Run Code Online (Sandbox Code Playgroud)

在 Selenium 4.0 中,FindElementById 不再起作用:

无法找到类型 [OpenQA.Selenium.Support.UI.ExpectedConditions]。

据我所知,OpenQA.Selenium.Support.UI.ExpectedConditions 存在于 WebDriver.Support 中,对吧?

寻找替代品,我发现了 SeleniumExtras.WaitHelpers,但这可能只适用于 .netstandard2.1?

powershell selenium4

2
推荐指数
1
解决办法
3088
查看次数

请求帮助来解析字符串

我正在使用Invoke-WebRequest来获取HtmlWebResponseObject对象.当描述字段匹配特定字符串(在本例中为"server1")时,我想获取ID字段的值.Invoke-WebRequest返回了数百个结果(因此字符串超长)鉴于下面的示例,我将如何提取ID?

{"status":200,"data":[{"nextRecipient":0,"clearSent":true,"lastSentNotificationOn":0,"netscanVersion":"0","suppressAlertClear":"false","build" :"19000","lastSentNotificationOnLocal":"","id":6,"resendIval":15,"watchdogUpdatedOn":"2016-04-11 10:28:02 MDT","escalatingChainId":6,"description ":"domain\server1","ackComment":"","credential2":"","updatedOn":1460392096,"updatedOnLocal":"2016-04-11 10:28:16 MDT","agentConf": "product.code = {guid}\r \n#安装程序版本,不得修改\ r \n \ninstaller.version = 0001\r \n\r \n#由代理配置向导生成\ r \n \n \n \n \net = url\r \n \ncompany = company\r \nid = 6\r \n ncredential == cred\r \n\r \n#logger settings.将logger.size设置为0,对记录器大小没有限制,否则,大小限制为指定的Mbytes那个\ r \n \nlogger.output = console\r \n \nlogger.logfile =\r \n \nlogger.size = 64\r \n \nlogger.level = info\r \n\r \n#watchdog log level\r \nlogger.watchdog = info\r \n#为每个组件添加更详细的控件\ r \n#eg\r \n #logge r.level.controller = debug\r \n#\ r \n#如果没有设置,它将使用默认日志级别,即logger.level的值\ r \n#\ r \n\r \n#if …

powershell

1
推荐指数
1
解决办法
102
查看次数

使用 PowerShell 和 Selenium 4 查找元素

我正在更新一些以前与 Selenium 3.141 一起使用的 PowerShell 代码。我有以下代码片段:

$url = "https://<webpage.com>"
$options = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$options.AddArgument("--disable-gpu")
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($options)
$driver.Navigate().GoToURL($url)
$driver.FindElementById("username")
Run Code Online (Sandbox Code Playgroud)

在 Selenium 4.0 中,FindElementById 不再起作用:

方法调用失败,因为 [OpenQA.Selenium.Chrome.ChromeDriver] 不包含名为“FindElementById”的方法

看看https://www.lambdatest.com/blog/what-is-deprecated-in-selenium4/,我发现这应该可以工作(在Java中):

driver.findElement(By.id("username"))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将其转换为 PowerShell($driver.FindElement(By.id("username")) 不起作用)。

知道如何使用 PowerShell 和 Selenium 4 通过 ID(或类、xpath 等)查找元素吗?

powershell selenium selenium4 powershell-5.1

1
推荐指数
1
解决办法
5426
查看次数

标签 统计

powershell ×5

selenium4 ×2

powershell-5.1 ×1

selenium ×1