标签: cmdlet

创建PowerShell脚本以备份文件并附加日期

目前我有一个批处理文件来备份文件.我需要备份文件时手动运行它.我想要添加的唯一内容是当前日期.这是我有的:

xcopy/W/Y ACTIVE.DB ACTIVE.DB.BACKUP

目标文件应该只是ACTIVE.DB.BACKUP.YYYYMMDD.我将如何创建一个脚本,允许我从Windows资源管理器中双击它并使xcopy发生?

powershell cmdlet

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

PowerShell cmdlet参数的较短版本

根据我的研究,我不相信以下内容很容易实现,如果有的话.然而,作为最后的手段,我想我会在这里查看.

在Powershell 2.0中,我想要一种方法来将(恼人的)长参数名称减少到各种cmdlet.我想绝对控制速记版本的样子.(而不是PS使用的任何参数缩写方案的奴隶.)

所以,举例来说,我希望能够做到这样的事情:

# Command goes on this first line to alias "-ForegroundColor" to "-fg"
# Command goes on this second line to alias "-BackgroundColor" to "-bg"
Wr-te-Host -fg yellow -bg black "Parameter aliases now work just like I want."
Run Code Online (Sandbox Code Playgroud)

我最接近这个功能的是什么,以及如何?我无法使用'get-help about_parameters'找到有关参数缩写的任何内容.

谢谢!

parameters powershell alias cmdlet

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

带有Hashtable/Dictionary参数的Powershell C#Cmdlet

任何人都可以告诉我如何将参数添加到我的自定义C#cmdlet,这是一个Hashtable/StringDictionary,以便我可以以类似于这样的方式调用我的cmdlet:

 CustomCmdlet -File $someFilePath `
              -StringDictionary/HashtableParameter @{
                            "name1"="value1"
                            "name2"="value2"
                            "name3"="value3"
                            ...
                       }
Run Code Online (Sandbox Code Playgroud)

我根本找不到任何文档/示例,这些文档/示例清楚而简单地解释了如何执行此操作,或者甚至可以用于自定义cmdlet.

我可以使用:

    [Parameter(Mandatory = false, Position = 9)]
    public Dictionary<string,string> FieldValues { get; set; }

    [Parameter(Mandatory = false, Position = 9)]
    public HashTable FieldValues { get; set; }

    ...
Run Code Online (Sandbox Code Playgroud)

或者是其他东西?

亲切的问候

c# parameters powershell hashtable cmdlet

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

具有强制参数的Powershell Cmdlet

我正在尝试创建一个简单的PowerShell cmdlet,它具有一些必需参数.我已经找到了以下代码,但是,我无法执行它:

function new-command() {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory=$true)]
        [string]$Name
    )
}

new-command
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

在表达式中缺少关闭')'.行:5个字符:3 + [<<<< string] $ Name

我究竟做错了什么?

parameters powershell cmdlet

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

Start-Job脚本块 - 如何使用参数调用cmdlet?

我是Start-Jobcmdlet的新手,我在调用带有cmdlet的脚本块时遇到了问题.这是我到目前为止所拥有的:

    Start-Job -ScriptBlock {
       $ServiceObj = Get-Service -Name $ServiceName -ComputerName $Computer -ErrorAction Stop   
       Stop-Service -InputObj $ServiceObj -erroraction stop 
    }
Run Code Online (Sandbox Code Playgroud)

我在运行时看到错误receive-job,-ComputerName参数为null或为空,-InputObj参数为null或为空.在这两种情况都不是这样.上面的代码片段是从两个foreach循环内部调用的:

foreach($Computer in $ComputerNames) {
  foreach($ServiceName in $ServiceNames) {
   #..call snippet above
  }
 }
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用-ArgumentListwhen调用我的脚本块,但也没有运气.我确定我错过了什么?

powershell arguments cmdlet start-job

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

Powershell concat字符串和变量内联?

我想做以下事情:

New-WebVirtualDirectory -Site "Site1" -Name "XX_$args[0]" -physicalPath "c:\sites\XX_$args[0]"
Run Code Online (Sandbox Code Playgroud)

其中"XX_"是一个静态字符串,$ args [0]是传递给脚本的第一个参数.现在我知道我可以通过创建两个变量然后将这些变量传递给cmdlet(New-WebVirtualDirectory)来"解决"这个问题但是有没有办法在线连接静态字符串和变量($ args [0])没有添加两个变量?

我尝试将它们包含在()中(例如-Name("XX_"+ $ args [0]))但没有成功.

string powershell cmdlet

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

如何在CmdletBinding()脚本中定义函数?

我正在编写一个脚本,我想使用PowerShell的CmdletBinding().有没有办法在脚本中定义函数?当我尝试时,PowerShell在表达式或语句中抱怨"意外的toke'函数"

这是我正在尝试做的简化示例.

[CmdletBinding()]
param(
    [String]
    $Value
)

BEGIN {
    f("Begin")
}

PROCESS {
    f("Process:" + $Value)
}

END {
    f("End")
}

Function f() {
    param([String]$m)
    Write-Host $m
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,编写模块是浪费的开销.这些函数只需要可用于这一个脚本.我不想弄乱模块路径或脚本位置.我只想运行一个包含其中定义的函数的脚本.

powershell pipeline function cmdlet

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

在PowerShell 2.0中将编码设置为ANSI

我想设置一个文件的编码采用的参数为ANSI -Encoding的的Set-Contentcmdlet的,我想这一个,但它没有工作:

Set-Content -LiteralPath "$filePath" -Encoding Default
Run Code Online (Sandbox Code Playgroud)

powershell encoding ansi cmdlet powershell-2.0

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

C# 需要访问 Microsoft Management Infrastructure 命名空间

所有,我正在编写一个 Powershell cmdlet。让我的本地机器上的 cmdlet 一切正常。查看访问远程机器所需的内容,似乎我需要在我的项目中引用 Microsoft.Management.Infrastructure.dll。我已经搜索我的系统无济于事。

所以我打了谷歌。我确认我正在运行 Windows 7 SP1。下载并安装了 Windows 管理框架 (WMF) 4.0。没运气。仍然没有DLL。我确认我达到了最低要求。

然后我发现一个 Microsoft 页面说版本 5 需要 WMF 4.0 作为安装的先决条件。所以我将我的 .Net Framework 升级到 4.6.2。然后安装WMF 5.0。在我的系统上的任何地方仍然没有 .DLL。

有谁之前经历过这个吗?任何人都可以阐明我可能做错了什么吗?我使用的是 Visual Studio 2010。这是问题的原因吗?

我继续在网络上搜索并发现文章指出 Microsoft.Management.Infrastructure dll 是 Windows 7 SDK 的一部分。尝试安装 SDK 没有效果。仍然无法在我的系统上加载 dll。

继续寻找解决办法。

.net c# cmdlet

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

返回多个对象的 cmdlet,它是什么集合类型(如果有)?[电源外壳]

Get-ADusercmdlet的示例:

$Users = Get-ADuser -Filter *
Run Code Online (Sandbox Code Playgroud)

在大多数情况下它会返回多个 ADuser 对象,但它是什么“集合”类型?文档只说它会返回一个或多个 Microsoft.ActiveDirectory.Management.ADUser 的用户对象。

尝试使用例如,($Users -is [System.Collections.ArrayList])但我无法确定“集合”类型?

arrays collections powershell cmdlet

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