标签: cmdlets

将Remove-Item与凭证一起使用

我试图使用Remove-Item cmdlet作为系统自动化的一部分.这些文件存储在需要提升权限才能执行文件删除的服务器上.我可以访问用于此类自动化脚本的域管理员帐户.

下面的代码将构建PSCredential对象:

$password = New-Object System.Security.SecureString
"passwordhere".ToCharArray() | ForEach-Object { $password.AppendChar($_) }
$cred = New-Object System.Management.Automation.PSCredential("domain\username",$password)
$cred
Run Code Online (Sandbox Code Playgroud)

我将此对象传递给以下操作:

Remove-Item -LiteralPath $path -Force -Credential $cred
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

powershell cmdlets powershell-2.0

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

是不赞成Make-Shell?

几年前,我使用Make-shell创建了带有自定义cmdlet的自定义shell.后来我使用了snap-in技术,我忘记了这个选项.

现在我应该为一大批客户部署一组自定义cmdlet,最好提供一个零配置解决方案; 因此,我记得自定义shell解决方案,我想知道它是否仍然是这种情况下的最佳解决方案.它也会有所帮助,因为我的cmdlet使用WF 4.0,因此shell应该在最新的框架版本下运行.无论如何,我对它的支持有点害怕:它是否仍在使用Powershell 2.0功能?

是否有其他方法可以在客户的计算机上轻松部署cmdlet?

谢谢

powershell cmdlets pssnapin powershell-2.0

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

New-AzureDeployment可能存在的错误

新AzureDeployment cmdlet中未从-Name参数的值更新部署名称.根据此处的 MSFT文档,-Name参数映射到部署名称,但在我测试时,使用-Name参数值更新了部署唯一名称.而且,我可以使用像'.'这样特殊字符."/"中部署名称直接从门户网站上传包时,但该cmdlet不会让我使用任何特殊字符

想知道是否有人遇到过这个问题?

这是我在使用特殊字符时看到的错误的屏幕截图

新Azuredeployment:HTTP状态代码:BadRequest - HTTP错误消息:部署名称无效

在此输入图像描述

cmdlets azure azure-deployment azure-powershell

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

如何在 Cmdlet 中隐藏参数

我想对用户隐藏 PowerShell Cmdlet 参数。有没有办法在 C# 中做到这一点?

我想在我的代码中使用此参数来触发具有隐藏参数的相同 cmdlet。

我使用 PowerShell 2.0。

谢谢。

c# powershell cmdlets pscmdlet

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

如何在Visual Studio中从C#调用PowerShell cmdlet

我正在从Visual Studio创建一个PowerShell cmdlet,我无法找到如何从我的C#文件中调用cmdlet,或者这是否可能?我一个接一个地运行我的cmdlet没有问题,但我想设置一个cmdlet来在续集中运行多个cmdlet.

c# powershell cmdlets visual-studio-2012

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

Powershell 自定义 cmdlet 在标准方法的实现之外调用 WriteVerbose

Msdn 文档对 WriteVerbose 方法说:

“只能从 BeginProcessing、ProcessRecord 和 EndProcessing 方法的实现中调用此方法,并且只能从该线程调用。如果从这些实现外部或另一个线程调用此方法,则会引发 InvalidOperationException 异常。”

但是在我的测试代码中,我能够在三个标准方法之外调用该方法。但是当从不同的线程调用该方法时,我得到了一个异常。

我相信这里的大多数人在实现自定义 cmdlet 时都需要多线程支持。

我正在使用后台工作者来完成简单的多线程。在继续之前,我在 ProcessRecord 函数中等待 doWork 事件完成。现在我想使用来自 doWork 的 writeverbose 向用户报告进度,但由于它是一个不同的线程,我不能这样做。

我已经尝试使用带有 AutoResetEvent 的并发队列来实现这一点,但是有没有更好的方法以更简单的方式解决这个问题?

c# powershell cmdlets multithreading backgroundworker

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

使用 Robocopy 获取文件列表

我想看看使用 Robocopy 的解决方案是否比使用Get-ChildItem获取给定文件夹(和子文件夹......)内的文件列表更快。

在我的代码中,我使用Get-ChildItemcmdlet 来获取特定文件夹内所有文件的列表,以便在每个文件上循环:

$files = Get-ChildItem "C:\aaa" -Recurse | where {! $_.PIsContainer} # ! because I don't want to list folders
foreach ($file in $files){
...
}
Run Code Online (Sandbox Code Playgroud)

现在,我有 robocopy 命令来获取所有文件的列表,但是,robocopy 的输出是一个字符串。

[string]$result = robocopy "C:\aaa" NULL /l /s /ndl /xx /nc /ns /njh /njs /fp
Run Code Online (Sandbox Code Playgroud)

那么,我如何使用 robocopy 命令的输出来循环每个文件(类似于使用Get-ChildItem?

powershell cmdlets robocopy

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

Powershell功能处理或中止处理程序

我有一个管道函数,它在begin块中分配一些需要在最后处理的资源.我已尝试在end块中执行此操作但在函数执行中止时不会调用它,例如ctrl+ c.

如何修改以下代码以确保$sw始终处置:

function Out-UnixFile([string] $Path, [switch] $Append) {
    <#
    .SYNOPSIS
    Sends output to a file encoded with UTF-8 without BOM with Unix line endings.
    #>
    begin {
        $encoding = new-object System.Text.UTF8Encoding($false)
        $sw = new-object System.IO.StreamWriter($Path, $Append, $encoding)
        $sw.NewLine = "`n"
    }
    process { $sw.WriteLine($_) }
    # FIXME not called on Ctrl+C
    end { $sw.Close() }
}
Run Code Online (Sandbox Code Playgroud)

编辑:简化功能

powershell cmdlets

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

在powershell 2中仅返回带有Get-childitem的文件

我知道我们可以在Powershell V3.0中使用参数-File,但是如何在Powershell V2中只获取带有Get-childitem cmdlet的文件?

windows powershell cmdlets cmdlet powershell-2.0

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

通过变量执行cmdlet?

我想使用一个if \ else语句来确定运行哪个cmdlet,同时为两个命令保持相同的参数:

例如我有这个电话:

    New-AzureRmResourceGroupDeployment `
        -ResourceGroupName $ResourceGroup `
        -TemplateFile $TemplateUri `
        -TemplateParameterFile $TemplateParamFile 
Run Code Online (Sandbox Code Playgroud)

但我想用变量来确定动词:

    $myVerb = if ($booleanTest) {"Test"} else {"New"}
    [$myVerb]-AzureRmResourceGroupDeployment `
         -ResourceGroupName $ResourceGroup `
         -TemplateFile $TemplateUri `
         -TemplateParameterFile $TemplateParamFile 
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

    $command = if ($booleanTest) {"Test-AzureRmResourceGroupDeployment"} else {"New-AzureRmResourceGroupDeployment"}
    $command `
         -ResourceGroupName $ResourceGroup `
         -TemplateFile $TemplateUri `
         -TemplateParameterFile $TemplateParamFile 
Run Code Online (Sandbox Code Playgroud)

我尝试了这个$command版本,但它失败了:

在C:\ Users\Administrator\Dropbox\projects\deloitte\Suncore\Dev\scripts\az -d eploy.ps1:36 char:13 + -ResourceGroupName $ ResourceGroup + ~~~~~~~~~~~~~~~~~~ Unexpected token '-ResourceGroupName' in expression or statement. At C:\Users\Administrator\Dropbox\projects\deloitte\Suncore\Dev\scripts\az-d eploy.ps1:36 char:32 + -ResourceGroupName $ResourceGroup …

windows powershell cmdlets

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