我正在尝试使用powershell编写一个脚本,该脚本在满足打开3个或更少文件的特定情况的计算机集合上调用net.exe的删除。显然,我是相当新的,因为我遇到了奇怪的错误。
使用Microsoft's blog处的示例,我在net session
之外创建了以下功能。
Function Get-ActiveNetSessions
{
# converts the output of the net session cmd into a PSobject
$output = net session | Select-String -Pattern \\
$output | foreach {
$parts = $_ -split "\s+", 4
New-Object -Type PSObject -Property @{
Computer = $parts[0].ToString();
Username = $parts[1];
Opens = $parts[2];
IdleTime = $parts[3];
}
}
}
确实产生了一个可以运用逻辑的可用对象。
我可以用
$computerList = Get-ActiveNetSessions | Where-Object {$_.Opens -clt 3} | Select-Object {$_.Computer}
将所有少于三个的计算机拉入变量。
失败的是下面的循环
ForEach($computer in $computerList)
{
net session $computer /delete
}
错误
net : The syntax of this command is:
At line:5 char:5
net session $computer /delete
CategoryInfo :NotSpecified (The syntax of this command is::String) [], RemoteException
FullyQualifiedErrorId : NativeCommandError
NET SESSION
[\\computername] [/DELETE] [/LIST]
尝试在执行前调用$computer = $computer.ToString()
来运行它,以便它看到一个字符串会导致脚本挂起而不会丢弃会话,从而迫使我关闭并重新打开ISE。
我该怎么做才能使这个循环工作?任何帮助表示赞赏。
答案 0 :(得分:0)
Net会话期望服务器名称前面有<Role name="myrole">
<SchemaGrant access="none">
<CubeGrant cube="Transaction" access="all">
<HierarchyGrant hierarchy="[Product.Product]" access="custom" rollupPolicy="partial">
<MemberGrant member="[Product.Product].[Cottage Foods]" access="all"/>
<MemberGrant member="[Product.Product].[Vegetables]" access="all"/>
....
</HierarchyGrant>
....
</CubeGrant>
</SchemaGrant>
</Role>
,看起来像。你试过试试吗?