Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell正在将信息输出到文本文件中,而不是输出到输出窗格中_Powershell - Fatal编程技术网

Powershell正在将信息输出到文本文件中,而不是输出到输出窗格中

Powershell正在将信息输出到文本文件中,而不是输出到输出窗格中,powershell,Powershell,这里有一个脚本,我需要导出到文本文件的结果也显示在底部的输出窗格中。有人能帮忙吗 我目前得到的结果是,它只显示了机器的品牌和型号,而没有显示从域到内存(GB)的其他机器。我希望所有内容都显示在底部的输出窗格中,并保存在一个文本文件中,该文件可以立即保存和打开 请注意:文件在中打开时包含数据,但主要问题是它没有显示在输出窗格中。以下是脚本: 清除主机 写入主机“将执行策略设置为远程签名…”-ForegroundColor黄色 Set ExecutionPolicy RemoteSigned-For

这里有一个脚本,我需要导出到文本文件的结果也显示在底部的输出窗格中。有人能帮忙吗

我目前得到的结果是,它只显示了机器的品牌和型号,而没有显示从域到内存(GB)的其他机器。我希望所有内容都显示在底部的输出窗格中,并保存在一个文本文件中,该文件可以立即保存和打开

请注意:文件在中打开时包含数据,但主要问题是它没有显示在输出窗格中。以下是脚本:

清除主机
写入主机“将执行策略设置为远程签名…”-ForegroundColor黄色
Set ExecutionPolicy RemoteSigned-Force
写入主机“您的执行策略设置为:”-ForegroundColor青色
获取执行策略
开始睡眠-S3
清除主机
写入主机“生成计算机统计…”-ForegroundColor黄色
写入主机“”
开始睡眠-s2
函数systemstats{
写入主机“制造商:”-ForegroundColor青色
写入主机“$($m.Manufacturer)”-前底色黄色
写主机“型号:”-ForegroundColor青色
写入主机“$($m.Model)”-前底色黄色
写入主机“域:”-ForegroundColor青色
$env:USERDOMAIN
写入主机“计算机名”-ForegroundColor青色
$env:COMPUTERNAME
写入主机“操作系统和位置:”-ForegroundColor青色
(获取WmiObject Win32_OperatingSystem)。名称
写入主机“OS架构”-ForegroundColor青色
if((获取WmiObject win32|u operatingsystem |选择osarchitecture).osarchitecture-eq“64位”)
{
写“64位操作系统”
}
其他的
{
写“32位操作系统”
}
写入主机“OS Build:”-ForegroundColor青色
(获取CimInstance Win32_OperatingSystem)。版本
写入主机“版本:”-ForegroundColor青色
(获取ItemProperty-路径“HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion”-名称ReleaseID)。ReleaseID
写入主机“当前IP地址”-ForegroundColor青色
Ipconfig |选择字符串IPv4
写入主机“以MB为单位安装的计算RAM:”-ForegroundColor青色
(systeminfo |选择字符串“总物理内存:”).ToString().Split(“:”)[1].Trim()
$m=(获取WmiObject-类Win32_ComputerSystem-属性*|
选择对象-属性(制造商、型号)
写入主机“磁盘空间(GB):-ForegroundColor青色
gwmi win32_logicaldisk | Format Table DeviceId,MediaType,@{n=“Size”e={[math]::Round($\.Size/1GB,2)},@{n=“FreeSpace”;e={[math]::Round($\.FreeSpace/1GB,2)}
}
$result=(systemstats)
$result |输出文件“C:\Users\brendan.hargate\Desktop\test.txt”
调用项目“C:\Users\brendan.hargate\Desktop\test.txt”
使用而不是
输出文件

$result | Tee-Object -FilePath "C:\Users\brendan.hargate\Desktop\test.txt"

Tee对象
(灵感来源),将复制输入流-一个副本沿管道传递(在您的情况下,将在命令窗格中结束),另一个将写入变量或文件(如上面的示例中)

您的
systemstats
功能部分使用了在PowerShell(成功)输出流之外运行的
Write Host

写入主机
无法在变量或输出文件中捕获输出(PSv4)/默认情况下未捕获输出(PSv5+)。顾名思义,
写入主机
写入主机UI(控制台),而不是输出数据
——这就是
写入输出
及其别名,
写入
,以及隐式输出(例如,
$env:USERDOMAIN
本身)的用途

变量赋值,如
$result=…
仅捕获(成功)输出流输出,即隐式输出和
写入
(又称
写入输出
)命令的输出。相比之下,您的
Write Host
命令直接打印到控制台

假设您将
$result
发送到一个文件,而没有将其打印到控制台,那么净效果是控制台中只显示
写入主机
输出

因此,解决方案有两个组成部分:

  • 修改函数以仅使用隐式输出(
    Write output
    output)来生成数据输出

  • 然后使用
    Tee对象
    打印到控制台(通过成功输出流)和文件,如中所示


另一方面,在PSv5+中,您可以通过新引入的输出流编号
6
,捕获
写入主机
输出(现在是
写入信息
的虚拟别名),从而避免以下情况(尽管这是不明智的):

systemstats 6>&1 | # PSv5+: redirect the information stream to the (success) output stream.
  Tee-Object -FilePath "$([Environment]::GetFolderPath('Desktop'))\text.txt"

您只看到您的本地计算机信息,因为您正在本地运行。您必须连接到AD并获取所有计算机对象,然后使用foreach循环获取每个计算机对象的信息。我知道我不是在问这个问题。问题的关键是看是否有人可以提供帮助,说明为什么它不显示在底部的输出窗格中以及文本文档中。它不显示是因为您在执行此操作之前直接将它保存在test.txt中,首先调用$result如果您查看脚本的底部,它会显示$result。但是您正在将输出发送到test.txt,因此powershell控制台中没有显示任何内容。保存后没有显示任何内容。谢谢,但现在它不会显示任何写入主机