我对PowerShell比较陌生,并且有一个脚本可以读取一个配置文件,该文件会产生一组名称值对,我希望将它们作为参数传递给第二个PowerShell脚本中的函数.
我不知道在设计时将在此配置文件中放置哪些参数,所以就在我需要调用第二个PowerShell脚本时,我基本上只有一个变量具有第二个脚本的路径,第二个脚本变量,它是要传递给路径变量中标识的脚本的参数数组.
因此,包含第二个脚本($ scriptPath)路径的变量可能具有如下值:
"c:\the\path\to\the\second\script.ps1"
Run Code Online (Sandbox Code Playgroud)
包含参数($ argumentList)的变量可能类似于:
-ConfigFilename "doohickey.txt" -RootDirectory "c:\some\kind\of\path" -Max 11
Run Code Online (Sandbox Code Playgroud)
如何从这种状态到使用$ argumentList中的所有参数执行script.ps1?
我希望来自第二个脚本的任何write-host命令对于调用此第一个脚本的控制台是可见的.
我尝试过dot-sourcing,Invoke-Command,Invoke-Expression和Start-Job,但我还没有找到一种不会产生错误的方法.
例如,我认为最简单的第一条路线是尝试按如下方式调用Start-Job:
Start-Job -FilePath $scriptPath -ArgumentList $argumentList
Run Code Online (Sandbox Code Playgroud)
...但是由于此错误而失败:
System.Management.Automation.ValidationMetadataException:
Attribute cannot be added because it would cause the variable
ConfigFilename with value -ConfigFilename to become invalid.
Run Code Online (Sandbox Code Playgroud)
...在这种情况下,"ConfigFilename"是第二个脚本定义的参数列表中的第一个参数,我的调用显然试图将其值设置为"-ConfigFilename",这显然是为了按名称标识参数,没有设定它的价值.
我错过了什么?
编辑:
好的,这是一个名为invokee.ps1的文件中的待调用脚本的模型
Param(
[parameter(Mandatory=$true)]
[alias("rc")]
[string]
[ValidateScript( {Test-Path $_ -PathType Leaf} )]
$ConfigurationFilename,
[alias("e")]
[switch]
$Evaluate,
[array]
[Parameter(ValueFromRemainingArguments=$true)]
$remaining)
function sayHelloWorld()
{
Write-Host "Hello, everybody, the config file is <$ConfigurationFilename>."
if ($ExitOnErrors)
{
Write-Host "I should …Run Code Online (Sandbox Code Playgroud) powershell parameter-passing command-line-arguments invoke-command start-job
我在SQL中有一个名为getBuisnessDays的用户定义函数,它需要@startdate和@enddate,并返回两个日期之间的工作日数.如何在我的选择中调用该函数?
这就是我想要做的......
SELECT getBusinessDays(a.opendate,a.closedate)
FROM account a
WHERE ...
Run Code Online (Sandbox Code Playgroud) 这是我的数据库连接字符串.到目前为止我没有设置最大池大小.
public static string srConnectionString =
"server=localhost;database=mydb;uid=sa;pwd=mypw;";
Run Code Online (Sandbox Code Playgroud)
那么目前我的应用程序支持多少个连接?增加连接池大小的正确语法是什么?
该应用程序是用C#4.0编写的.
这里有个问题.我正在使用String.Join将数组转换为字符串.我遇到的一个小问题是,在数组中,一些索引位置将为空白.一个例子如下:
array[1] = "Firstcolumn"
array[3] = "Thirdcolumn"
Run Code Online (Sandbox Code Playgroud)
通过使用String.Join(",",array);,我将得到以下内容:
Firstcolumn ,, Thirdcolumn
注意额外的,.如何在使用String.Join时从字符串中删除额外的逗号,或者理想情况下不包含空索引?
我开始使用PowerShell并在'库'文件中创建函数以提高可读性,然后我从'worker'脚本调用它.
function ShowMessage($AValue)
{
$a = new-object -comobject wscript.shell
$b = $a.popup( $AValue )
}
Run Code Online (Sandbox Code Playgroud)
在PowerShell IDE中运行'worker'脚本时工作正常,但是当我右键单击worker文件并选择'Run with PowerShell'时,它找不到函数'ShowMessage'.两个文件都在同一个文件夹中.请问这里可能会发生什么?
如何使用PowerShell提取子字符串?
我有这个字符串......
"-----start-------Hello World------end-------"
Run Code Online (Sandbox Code Playgroud)
我必须提取......
Hello World
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我最近遇到过这种情况,到目前为止,我一直在愉快地重写等于运算符(==)和/或Equals方法,以查看两个引用类型是否实际包含相同的数据(即两个看起来相同的不同实例).
我一直在使用它,因为我已经进行了更多的自动化测试(比较参考/预期数据与返回的数据).
在查看MSDN中的一些编码标准指南时,我遇到了一篇建议反对它的文章.现在我理解为什么文章说这个(因为它们不是同一个实例)但它没有回答这个问题:
非常感谢^ _ ^
看起来我错误地阅读了一些文档(这是漫长的一天)并且压倒Equals可能是要走的路.
如果要实现引用类型,则应考虑在引用类型上覆盖Equals方法(如果类型看起来像基本类型,如Point,String,BigNumber等).大多数引用类型不应重载等于运算符,即使它们重写等于.但是,如果要实现旨在具有值语义的引用类型(例如复数类型),则应覆盖相等运算符.
我使用Drag和Drop将Data Source对象(一个DB模型)绑定到DataGrid(基本上遵循WPF实体框架数据绑定中的这个示例).
这个实现一切正常.
<Window.Resources>
<CollectionViewSource x:Key="categoryViewSource"
d:DesignSource="{d:DesignInstance {x:Type local:Category}, CreateList=True}"/>
</Window.Resources>
<Grid DataContext="{StaticResource categoryViewSource}">
..
Run Code Online (Sandbox Code Playgroud)
private void Window_Loaded(object sender, RoutedEventArgs e)
{
System.Windows.Data.CollectionViewSource categoryViewSource =
((System.Windows.Data.CollectionViewSource)(this.FindResource("categoryViewSource")));
_context.Categories.Load();
categoryViewSource.Source = _context.Categories.Local;
}
Run Code Online (Sandbox Code Playgroud)
public MainWindow()
{
InitializeComponent();
this.DataContext = new MyViewModel();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在ViewModel中使用相同的代码时,它不起作用(FindResource不可用),此外,我不认为这是正确的方法(即x:Key在MVVM中使用).
我真的很感激任何帮助点我是什么来实现的正确途径CollectionViewSource,并DataBinding用DataGrid.