小编mkl*_*nt0的帖子

在PowerShell中查询LINQ样式的列表

add-type -Language CSharpVersion3 -TypeDefinition @"
    public class pack_code
    {
        public pack_code() {}

        public string code { get; set; }
        public string type { get; set; }
    }
"@

$a = New-Object pack_code
$a.code = "3"
$a.type = "5"
$b = New-Object pack_code
$b.code = "2"
$b.type = "5"
$c = New-Object pack_code
$c.code = "2"
$c.type = "5"
$d = New-Object pack_code
$d.code = "1"
$d.type = "1"

$codes = New-Object 'System.Collections.Generic.List[object]'
$codes.add($a)
$codes.add($b)
$codes.add($c)
$codes.add($d)
Run Code Online (Sandbox Code Playgroud)

有没有办法从$ code中选择不同的并选择类型等于1的对象?如何在PowerShell中使用LINQ?

linq powershell

12
推荐指数
3
解决办法
3万
查看次数

.NET方法的例外是终止或不终止错误吗?

在这篇伟大的文章中, Keith解释了Powershell中终止和非终止错误之间的区别.根据Keith从调用.NET对象或类型成员抛出的异常是非终止错误.

确实,如果我们定义这个.NET类进行测试:

$a = Add-Type 'public class bla { public static void bl() { throw new System.ApplicationException("test"); }}' -PassThru
Run Code Online (Sandbox Code Playgroud)

然后这个功能:

function tst { 1 | write-host; $a::bl(); 2 | Write-host }
Run Code Online (Sandbox Code Playgroud)

我们将看到,当调用tst函数时,异常似乎是非终止的:第二个Write-Host起作用.

但考虑一下:

function tst2 { try { tst } catch { "Catch!" } }
Run Code Online (Sandbox Code Playgroud)

如果我们打开文档,我们可以读到catch响应或处理脚本中的终止错误.在文章的整个文本中,文章所处理的错误在许多地方被称为"终止".

因此,当我们在第二个Write-Host上面运行该行时,不会运行但是catch块会运行.似乎我们的非终止错误突然终止了.

怎么会?

另一个观察结果是,有了旧的陷阱,它仍然是非终止错误:

function tst3 { tst trap { "Trap!" } }
Run Code Online (Sandbox Code Playgroud)

现在,从实际角度来看,我想要实现的目标如下.在一段代码中,我想终止从.NET代码抛出的异常.我想留下cmdlet终止的终止错误和cmdlet非终止的非终止错误.

我该如何实现这一目标?

例:

Do-Something
Call::Something()
Do-SomethingElse
Call::SomethingElse()
Do-YetMoreSomething
Call::YetMoreSomething()
Run Code Online (Sandbox Code Playgroud)

我想终止上面.NET调用的所有异常.我还想终止从cmdlet终止错误.我不想终止cmdlet中的非终止错误.

error-handling powershell exception

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

为什么我不能在shell脚本中使用'sudo su'?如何自动使用sudo运行shell脚本

我无法弄清楚这有什么问题.当我在终端中运行并输入密码时,没有任何反应,但如果我在终端中单独运行每个命令,它就可以工作.谢谢!

#!/bin/bash    

sudo su;
mkdir /opt/D3GO/;
cp `pwd`/D3GO /opt/D3GO/;
cp `pwd`/D3GO.png /opt/D3GO/;
cp `pwd`/D3GO.desktop /usr/share/applications/;
chmod +x /opt/D3GO/D3GO
Run Code Online (Sandbox Code Playgroud)

linux bash shell sudo

12
推荐指数
4
解决办法
2万
查看次数

在PowerShell中导出为CSV时的列排序 - 控制从哈希表创建的自定义对象的属性枚举顺序

我正在写一个脚本Powershell,导出所有securitygroups和他们membersActive Directory.现在我想格式化输出.csv.

代码:

$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=SERVICES,DC=XXXXXX,DC=XXXXX" 

$Table = @()

$Record = @{
    "Group Name" = ""
    "Name" = ""
    "Username" = ""
}

Foreach($G In $Groups)
{
    $Arrayofmembers = Get-ADGroupMember -identity $G -recursive | select name,samaccountname
    Foreach ($Member in $Arrayofmembers) 
    {
        $Record."Group Name" = $G.Name
        $Record."Name" = $Member.name
        $Record."UserName" = $Member.samaccountname
        $objRecord = New-Object PSObject -property $Record
        $Table += $objrecord
    }
}

$Table | …
Run Code Online (Sandbox Code Playgroud)

csv powershell formatting pscustomobject export-to-csv

12
推荐指数
2
解决办法
2万
查看次数

创建批处理文件以启动cygwin并执行特定命令

我想创建一个启动cygwin并执行特定命令的批处理文件(该命令是读取bash文件并在其中执行一些命令).

这是我开发的批处理文件,它在某种程度上起作用.cygwin终端打开并尝试读取bash文件,但无法执行内部命令:

@ECHO OFF

C:\cygwin64\bin\mintty.exe -li /cygdrive/c/(path-to-bash-file-location)/(MyBashFile)

PAUSE
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

windows bash cygwin batch-file piping

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

通过“@”提供输入文件会出现错误:无法使用展开运算符“@”来引用表达式中的变量

按照此处的示例https://learn.microsoft.com/en-us/cli/azure/vm/run-command?view=azure-cli-latest

我在运行命令时遇到错误

az vm run-command invoke  --command-id RunPowerShellScript --name win-vm -g my-resource-group --scripts @script.ps1
Run Code Online (Sandbox Code Playgroud)

错误:

展开运算符“@”不能用于引用表达式中的变量。“@script”只能用作命令的参数。要引用表达式中的变量,请使用“$script”。

将其放在引号中只会传入引号中的内容,而不是脚本的内容。

powershell escaping az

12
推荐指数
2
解决办法
2万
查看次数

Powershell 相当于 Linux 的: ls -al

我不经常使用 Powershell 或 Linux,所以我不确定: ls -al 在 Powershell“术语”中是什么。我试图找到一些东西,但它说 Powershell 中没有等效的命令。看起来很奇怪,所以我想我应该尽快问一下。

linux powershell ls

12
推荐指数
1
解决办法
4万
查看次数

Windows 7任务调度程序保持返回操作代码2

我设置了一个在我的帐户下运行的计划任务.它运行的所有内容,即使成功,也会返回(2)的操作代码.我在下面的链接中看了这个错误代码,并声称它找不到特定的文件.

http://www.hiteksoftware.com/knowledge/articles/049.htm

即使我做一些非常简单的事情,我也会找回(2)的操作代码.例如:

run program: cmd.exe

start in path: c:\windows\system32
Run Code Online (Sandbox Code Playgroud)

我启动任务,我看到进程在我的任务管理器中运行,所以我终止了任务.然后我检查计划任务的历史记录,它显示为(2).

对我正在做的事情更加现实:

<?
/* file in c:\php\test.php */
echo "hello";
?>
Run Code Online (Sandbox Code Playgroud)

运行程序: php.exe

从路径开始: c:\php

参数: -f test.php

一切都在命令行中工作,但Windows计划任务保持返回操作代码(2).我应该看到(0)的操作代码,这意味着成功,正确吗?

scheduled-tasks windows-7

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

"现在无法切换到旧模式" - tls.connect函数中的Node.JS apn模块错误

我正在尝试实现Node.JS apn模块以连接到APNS(Apple推送通知服务),以便从运行Ubuntu 12.04的Amazon EC2实例上托管的节点服务器(使用ExpressJS)向iPhone设备发送通知.我收到此错误:

"Error: Cannot switch to old mode now.",
"    at emitDataEvents (_stream_readable.js:720:11)",
"    at ReadStream.Readable.resume (_stream_readable.js:705:3)",
"    at TLSSocket.<anonymous> (/home/ubuntu/usemebeta/routes/message.js:101:48)",
"    at TLSSocket.g (events.js:186:14)",
"    at TLSSocket.EventEmitter.emit (events.js:97:17)",
"    at TLSSocket.<anonymous> (_tls_wrap.js:579:16)",
"    at TLSSocket.EventEmitter.emit (events.js:97:17)",
"    at TLSSocket._finishInit (_tls_wrap.js:198:8)"
Run Code Online (Sandbox Code Playgroud)

当我调用apn模块函数来推送通知时.但是,当我在文件中写入的函数中执行相同的操作并执行该文件时,它的工作正常.请帮忙.我该如何解决这个问题呢?

javascript stream node.js

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

在CMD批处理文件中,我可以确定它是否是从PowerShell运行的吗?

我有一个Windows批处理文件,其目的是设置一些环境变量,例如

=== MyFile.cmd ===
SET MyEnvVariable=MyValue
Run Code Online (Sandbox Code Playgroud)

用户可以在完成需要环境变量的工作之前运行它,例如:

C:\> MyFile.cmd
C:\> echo "%MyEnvVariable%"    <-- outputs "MyValue"
C:\> ... do work that needs the environment variable
Run Code Online (Sandbox Code Playgroud)

这大致相当于Visual Studio安装的"Developer命令提示符"快捷方式,它设置了运行VS实用程序所需的环境变量.

但是,如果用户碰巧打开了Powershell提示符,则环境变量当然不会传播回Powershell:

PS C:\> MyFile.cmd
PS C:\> Write-Output "${env:MyEnvVariable}"  # Outputs an empty string
Run Code Online (Sandbox Code Playgroud)

对于在CMD和PowerShell之间切换的用户而言,这可能会造成混淆.

有没有办法可以在我的批处理文件MyFile.cmd中检测到它是从PowerShell调用的,所以我可以,例如,向用户显示警告?这需要在没有任何第三方实用程序的情况下完成.

windows powershell cmd batch-file

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