我有一些额外的功能,我在另一个PowerShell脚本文件中定义,我正在尝试加载主.ps1文件.但是,当我从PowerShell提示符调用.ps1文件时,它似乎没有运行这些命令.
在以下代码示例中,build_functions.ps1具有定义各种自定义函数的代码.如果我单独运行该文件(例如,单独运行它然后运行主脚本)它可以正常工作.Build_builddefs.ps1包含许多变量,这些变量在运行主脚本之前也需要填充.
在我的主要脚本的开头,我有这个:
.\build_functions.ps1
.\build_builddefs.ps1
Run Code Online (Sandbox Code Playgroud)
但是,这些似乎没有运行,因为主脚本在尝试执行第一个自定义函数时失败.我究竟做错了什么?
我将以下代码作为较长脚本的开头:
$ScriptPath = Split-Path $MyInvocation.MyCommand.Path
& $ScriptPath\build_functions.ps1
& $ScriptPath\build_builddefs.ps1
Run Code Online (Sandbox Code Playgroud)
我们的想法是获取正在运行的脚本的路径,并使用该路径调用一些支持脚本.但是,当我单独测试它以确保它可以工作时(通过突出显示该块并运行该代码),我收到以下错误:
Split-Path: Cannot bind argument to parameter 'Path' because it is null.
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我运行整个脚本时,它似乎分别运行这些文件.关于ISE如何处理运行选择而不是完整脚本,我有什么遗漏吗?运行选择时是否不建立文件系统上下文?
我正在创建一个脚本,它将触发性能计数器并将它们存储在.csv文件中,当文件太大时翻转.从PowerShell提示符或ISE(我正在运行v.2/win server 2008)运行脚本工作正常,文件正常运行.
但是,当我尝试使用以下cmd提示行执行命令时(甚至尝试在cmd上执行/ k开关),命令提示符立即关闭,文件未运行.
powershell.exe -windowstyle hidden {iis_test.ps1}
Run Code Online (Sandbox Code Playgroud)
我也试过以下,虽然我看到Powershell没有停止(我通过任务管理器监视它,寻找Powershell.exe显示),但我没有看到正在创建的文件.
powershell.exe -noexit -windowstyle hidden {iis_test.ps1}
Run Code Online (Sandbox Code Playgroud)
我也没有看到任何可能的地方(事件查看器,命令提示符窗口本身)中发现任何错误.
有任何想法吗?最终,我的目标是让一个vb winforms事件调用这些脚本文件,当然我认为找出命令提示符命令会有所帮助.请注意,此脚本可移植并在任何Windows 2008 Server系统上运行非常重要(因此我需要远离需要进一步安装的第三方实体).
编辑:我需要使用-file参数指定要运行的文件.
我正在使用Powershell返回某些性能计数器的值,我发现它在提供信息时指的是"Cookedvalues".我正在寻找自己报告的每个计数器命中,所以我可以做分析,比如看到第90个百分位值或最大/最小值,所以我需要知道它是如何达到熟食值的.这是我目前正在使用的代码:
$computer = $ENV:Computername
$instance = "_total"
@("\\$Computer\PhysicalDisk(*)\Current Disk Queue Length",
"\\$Computer\PhysicalDisk(*)\% Disk Time",
"\\$Computer\PhysicalDisk(*)\Avg. Disk Queue Length",
"\\$Computer\PhysicalDisk(*)\Avg. Disk Read Queue Length",
"\\$Computer\PhysicalDisk(*)\Avg. Disk Write Queue Length",
"\\$Computer\PhysicalDisk(*)\Avg. Disk sec/Transfer"
"\\$Computer\PhysicalDisk(*)\Avg. Disk sec/Read",
"\\$Computer\PhysicalDisk(*)\Avg. Disk sec/Write") |% {
(Get-Counter $_.replace("*",$instance)).CounterSamples } |
Select-Object Path,CookedValue |
Format-Table -AutoSize
# Retrieve the current Processor performance counter information.
$computer = $ENV:Computername
$instance = "_total"
@("\\$Computer\Processor(*)\% Processor Time",
"\\$Computer\Processor(*)\% User Time",
"\\$Computer\Processor(*)\% Privileged Time",
"\\$Computer\Processor(*)\Interrupts/sec",
"\\$Computer\Processor(*)\% DPC Time",
"\\$Computer\Processor(*)\DPCs Queued/sec"
"\\$Computer\Processor(*)\% Idle Time", …Run Code Online (Sandbox Code Playgroud) 我正在使用Ruby 1.9.3并且我发现了CSV类,但我无法使用它.基本上,我希望能够操作CSV的各种选项,然后将.csv文件拉入数组中以进行操作,最终将该数组推回到新文件中.
这就是我目前所拥有的:
require 'csv'
CSV_Definition = CSV.New(:header_converters => :symbol)
CSV_Total = CSV.Read(File.Path("C:\Scripts\SQL_Log_0.csv"))
Run Code Online (Sandbox Code Playgroud)
但是,我不认为这是改变的正确方法:header_converters.目前我无法让IRB工作来解析这些代码(我不知道如何require 'csv'在IRB中)所以我没有任何特定的错误消息.我对此的期望是创建一个数组(CSV_Total),其中包含一个没有符号的标题.下一步是将该数组放回新文件中.基本上它会擦除CSV文件.
我一直试图在我的小PowerShell v2脚本中使用IF-ELSE子句,我认为我的解析存在一些问题.这是我目前的代码:
$dir = test-path C:\Perflogs\TestFolder
IF($dir -eq "False")
{
New-Item C:\Perflogs\TestFolder -type directory
get-counter -counter $p -Continuous | Export-Counter C:\PerfLogs\TestFolder\Client_log.csv -Force -FileFormat CSV -Circular -MaxSize $1GBInBytes
}
Else
{
get-counter -counter $p -Continuous | Export-Counter C:\PerfLogs\TestFolder\Client_log.csv -Force -FileFormat CSV -Circular -MaxSize $1GBInBytes
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我希望它建立$ dir变量作为测试,以查看我想要的路径是否存在.如果没有,它应该创建该文件夹并运行计数器.如果是,它不应该创建文件夹,但仍应运行计数器.
我在其他地方定义了$ p,并且get-counters语句工作正常.现在,无论文件夹是否存在,我都会收到有关新项目无效的错误.
在进行测试后,我是否使用了错误的运算符-eq?
我正在定义一个日期变量,但我需要将日期作为文件名使用.因此,我需要替换Get-Date抓取的一些特殊字符,并用下划线和句点替换它们.
$date = Get-Date -Format G | foreach {$_ -replace ":", "."}
目前,它取代了datetime中的所有:,但是离开/.如何使用-replace替换多个东西?
我正在使用我的第一个VB.NET控制台应用程序,而且我很难用(可能)非常简单的概念.我需要将用户键入的内容与一系列字符串进行比较.
这是我到目前为止:
Console.WriteLine("Is there a 2nd IIS Server? (y/n)")
If Console.ReadLine() = "Yes" Or "yes" Or "Y" Or "y" Then
Servers.IISsvr2 = Console.ReadLine()
End If
Run Code Online (Sandbox Code Playgroud)
我知道这里的=运算符不正确,因为那是布尔值.我应该检查一系列布尔检查吗?或者有更好的方法来处理这种情况吗?
我有一个脚本,其中包含一个函数,该函数定义了一些变量,以便以后使用.例如,它看起来像这样:
$Rig = "TestRig1"
Function Setup{
If ($Rig -eq "TestRig1") {
$Script:Server="Alpharius"
$Script:IIS1="Tactical"
$Script:IIS2="Assault"
}
}
Setup
<do things with $Server>
Run Code Online (Sandbox Code Playgroud)
(这不是实际的脚本,但它是类似的)
我很好奇的是,如果有更好的方法来记录这一点,而不是单独用它们的范围标记每个变量.有什么方法可以说明函数中声明的所有变量都是脚本范围?
我需要弄清楚如何使用T-SQL查找某组记录,并且我无法弄清楚如何创建WHERE子句来执行此操作.
我有一个我正在使用的SQL 2008 R2系统,在这个数据库中有几个表.一个包含人事记录,另一个包含地址.地址与外键关系的人事记录有关.例如,要获得所有人员及其所有相关地址的列表(一个人可能有多个地址),我可以写下这样的内容:
SELECT id, name FROM personnel p
INNER JOIN address a
ON p.id = a.personnelid
Run Code Online (Sandbox Code Playgroud)
但是,每个地址都有一个名为isprimary0或1 的列.我需要做的是找出如何找到没有isprimary设置为1 的相关地址的所有人员.或者没有主地址的记录.
目前我的想法是建立一个临时表,其中包含未标记为主要地址的人员.然后循环遍历这些并构建具有主地址的子集.
然后从非主要人员的结果中减去Personnel With Primary表,我应该有我的列表.但是,我认为必须有一种更优雅的方式来做到这一点.有任何想法吗?
powershell ×7
background ×1
command-line ×1
csv ×1
foreach ×1
if-statement ×1
ruby ×1
sql ×1
sql-server ×1
t-sql ×1
vb.net ×1