我有一个脚本,显示所有本地用户及其关联的组。但是,我正在尝试将结果输出到文本文件中,这就是脚本出错的地方,因为它没有给出我从输出窗口收到的相同结果。例如,我的代码是:
$LogFile = Test-Path C:\Users\FredAslami\Downloads\Test.txt
$LocalUsers = [ADSI]"WinNT://$env:COMPUTERNAME"
if ($LogFile) {
$LocalUsers.Children | where {$_.SchemaClassName -eq 'user'} | Foreach-Object {
$groups = $_.Groups() | Foreach-Object {
$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
}
$_ | Select-Object @{n='UserName';e={$_.Name}},
@{n='Groups';e={$groups -join ';'}}
}
Write-Host "Got User Groups Info"
Out-File -FilePath C:\Users\FredAslami\Downloads\Test.txt `
-InputObject $LocalUsers -Append
Write-Host "Added info to text"
}
$LocalUsers.Dispose()
当我运行时,文件中的文字将为
distinguishedName :
Path : WinNT://R68-CUSTOM-01
我也尝试使用Add-Content
,但这也不起作用。它会添加如下内容:
System.DirectoryServices.DirectoryEntry
我也尝试在检索本地用户和组信息之后使用Write-Host
进行调试,并在将结果写入文本文件之后尝试使用另一个Write-Host
进行调试,并注意到它在收集之前将结果写入所有信息。所以我尝试使用Start-Sleep
,这似乎没有用。
答案 0 :(得分:1)
在第二行,您有Select-Object
。您从未为其分配过不同的值,因此您将其视为输出。
我建议您将Export-Csv
声明用于 //I am working on this assignment
objToSendServer.input1 = obj.input1
//type definitions are:
class obj {
input1: number;
}
class objToSendServer{
input1: number
}
// if I do this assignment that value of obj.input1 is "1"
// which cause of problem on server side
// which is web api odata, patch method that expects type of int
objToSendServer.input1 = obj.input1;
// if I try cast as below, error message is:
//Argument of type 'number' is not assingable of parameter of type 'string'
objToSendServer.input1 = parseFloat(obj.input1);
//My work around is:
objToSendServer.input1 = parseFloat(obj.input1.toString());
。更简单,更清洁。
答案 1 :(得分:0)
您在屏幕和文件输出中会得到不同的结果,因为您对数据做了不同的事情。以$localUsers.Children
开头的管道构建用户对象及其组成员资格的列表,并将其回显到屏幕,但您不会对该数据执行任何其他操作。相反,您将未修改的变量$localUsers
写入输出文件。
如果您希望表格数据同时输入控制台和文件,我建议使用Write-Host
作为控制台输出,Export-Csv
作为文件输出:
$LocalUsers.Children | where {$_.SchemaClassName -eq 'user'} | Foreach-Object {
$groups = $_.Groups() | Foreach-Object {
$_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
}
$o = New-Object -Type PSObject -Property @{
'UserName' = $_.Name
'Groups' = $groups -join ';'
}
Write-Host $o
$o
} | Export-Csv 'C:\Users\FredAslami\Downloads\Test.txt' -NoType
如果您希望输出转到成功输出流而不是控制台,您可以在变量中捕获结果并以两种不同的方式输出:
$users = $LocalUsers.Children | where {
$_.SchemaClassName -eq 'user'
} | Foreach-Object {
$groups = $_.Groups() | Foreach-Object {
$_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
}
New-Object -Type PSObject -Property @{
'UserName' = $_.Name
'Groups' = $groups -join ';'
}
}
$users
$users | Export-Csv 'C:\Users\FredAslami\Downloads\Test.txt' -NoType