小编Rak*_*kha的帖子

在 if 语句中组合多个条件

当您希望一组或另一组 2 个条件为真时,您如何将 4 个条件链接在一起?

更准确地说,我想做:

如果用户已登录且操作系统版本为 Windows 10

或者

用户已登录且 LogonUI 进程未运行

不要理会这些命令,它们在隔离时都可以正常工作,我的问题是将它们链接在一起。

例如我有:

if (
        (Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem).UserName`
        -and`
        (Get-WmiObject -Computer $poste -Class Win32_OperatingSystem).Version -like "*10*"
    )
    { echo do X }
Run Code Online (Sandbox Code Playgroud)

这是工作正常。我想在同一个if条件块中添加其他条件。我试过这个,但它不起作用:

if (
        (Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem).UserName`
        -and`
        (Get-WmiObject -Computer $poste -Class Win32_OperatingSystem).Version -like "*10*"`
        -or`
        (Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem).UserName`
        -and -not`
        (Get-Process -ErrorAction SilentlyContinue -ComputerName $poste -name logonui)
    )
    { echo do X }
Run Code Online (Sandbox Code Playgroud)

你如何像这样链接多个“块”?我知道我可以做两个不同的 IF,我让它工作了,但是没有办法将它全部链接到一个 IF 中吗?(IF 包含很多代码,我不想用两个 …

powershell boolean-logic if-statement

15
推荐指数
1
解决办法
7万
查看次数

[System.Web.Security.Membership]::GeneratePassword() - 类型未找到

为什么在 PowerShell 中尝试使用此类/方法时会出现 Type Not Found?

 [System.Web.Security.Membership]::GeneratePassword()
Run Code Online (Sandbox Code Playgroud)

我是否需要安装模块或其他东西才能使用它?

passwords powershell class

11
推荐指数
2
解决办法
7778
查看次数

Out-GridView显示一个空白列,其中有实际数据

我有这个CSV文件: 在此输入图像描述

实际的CSV数据用";"分隔 , 像这样:

[2017-04-27 15:45:04] ;x;/x;Succes;
Run Code Online (Sandbox Code Playgroud)

您可以看到有一个"Terminaison"列,其中包含成功或失败信息.我的目标是在Gridview中显示文件的所有列.

我正在做 :

import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";"
Run Code Online (Sandbox Code Playgroud)

并获得包含适当数据的所有列的所需输出:

在此输入图像描述

现在我的问题是:当我想在GridView中显示所有内容时,"terminaison"列全部为空?为什么?所有其他列都正确显示...:

import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";" | out-gridview
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我发现标题末尾的空格(csv文件的第一行)导致了这个...

Date;Trousse;Version;Demandeur;Action;Paramètres;Terminaison 
Run Code Online (Sandbox Code Playgroud)

(在"Terminaison"之后那里有一个空白处)

如果我在记事本中编辑csv并删除该空白区域,宾果游戏,它的工作原理.但是这并不能解决我的问题,因为我不想事先编辑文件.什么是这个奇怪的限制,是否有解决方法?


编辑:

下面提供的答案很棒.我最终使用另一个选项,我发现值得添加的可能性:

$content = Get-Content C:\x\Journal\Capsule\CapsulePoste.csv 
$content | Foreach {$_.TrimEnd()} | Set-Content C:\x\Journal\Capsule\CapsulePoste.csv
import-csv "C:\x\Journal\Capsule\CapsulePoste.csv" -Delimiter ";"| sort-object Date -descending
Run Code Online (Sandbox Code Playgroud)

powershell import-csv

7
推荐指数
2
解决办法
491
查看次数

批处理-运行循环命令时最小化窗口(不最小化启动)

我想知道是否有一种方法可以在运行某个命令后最小化批处理窗口。我已经知道启动/ min和最小化启动窗口的技巧,但是在运行循环或超时时该怎么办?

比方说:

echo Hello!
timeout /t 100
:COMMAND TO MINIMIZE WINDOW WHILE TIMEOUT IS RUNNING
Run Code Online (Sandbox Code Playgroud)

现在,我在bat文件中调用一个autoit脚本,以在命令运行时隐藏窗口:

WinSetState($application_name, "", @SW_HIDE) 
Run Code Online (Sandbox Code Playgroud)

但我正在寻找可以直接在.bat文件中编码的纯批处理/ powershell / vbs解决方案。

感谢您的时间!

vbscript powershell window batch-file minimize

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

Invoke-WebRequest 冻结/挂起

为什么 cmdlet“Invoke-WebRequest”在某些 URL 上冻结/挂起?任何可能的解决方法?我想访问给定网页的“跨度”对象,如果它没有像那样挂起,这个 cmdlet 将非常有用。

例如,这挂起:

Invoke-WebRequest -Uri "https://cloud.google.com/chrome-enterprise/browser/download/"
Run Code Online (Sandbox Code Playgroud)

这不会:

Invoke-WebRequest -Uri "https://www.microsoft.com/fr-ca/"
Run Code Online (Sandbox Code Playgroud)

-UseBasicParsing 使其运行,但我想使用 Invoke-WebRequest 返回的功能而无需基本解析,因为使用基本解析,我尝试提取的跨度字段未填充。

powershell freeze invoke-webrequest

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

关闭后删除 .txt 文件?

我想在文件关闭后删除它。

例子:

$content | Out-File info.txt
Invoke-Item info.txt
Run Code Online (Sandbox Code Playgroud)

这将打开文件 info.txt 的内容$content

现在我想做的就是,当这个文件关闭时,删除它。

知道如何做到这一点吗?我想我需要做一些事情,比如检查 info.txt 是否打开,如果没有,则运行Remove-Item info.txt

现在我使用这个“脏”解决方案,它会在 3 秒后强制删除文件,让它有时间在记事本中打开:

Start-Sleep -s 3
Remove-Item -Force -ErrorAction SilentlyContinue info.txt
Run Code Online (Sandbox Code Playgroud)

它仍然在记事本中打开以供查看,即使它不再存在,当我关闭文件时它已经被删除,所以它有点工作,但我仍在寻找一种正确的方法来检查文件是否在删除之前关闭。

powershell notepad file delete-file

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