IIS 配置脚本
Iiscnfg.vbs:IIS 配置脚本
Iiscnfg.vbs:IIS 配置脚本
导入和导出本地或远程计算机上 Internet 信息服务 (IIS) 配置数据库的所有或选定元素,或者将整个 IIS 配置(配置数据库和架构)复制到另一台计算机以复制配置。Iiscnfg 执行下列功能:
若要查看该命令语法,请单击以下命令:
• | |
• | |
• | |
• |
iiscnfg /export
以加密或未加密格式将所有或部分 IIS 配置数据库复制到 XML 文件。然后可在导入操作中使用 XML 文件来将所有或部分配置数据库复制到其他 IIS 配置。
语法
iiscnfg[.vbs] /export /f [Path\]FileName.xml /sp MetabasePath [/d EncryptingPassword] [/inherited] [/children] [/s Computer [/u [Domain\]User [/p Password]]]
参数
/f [Path\]FileName.xml
必需。指定导出文件的唯一名称和位置。如果指定的文件已存在或者指定路径中的目录不存在,则该命令将失败。
文件路径必须是本地路径。当从远程计算机导出文件时,/f 参数表明是远程计算机上的路径。
/sp MetabasePath
必需。指定要导出的配置数据库密钥。输入配置数据库路径以标识选定的密钥。
/d EncryptingPassword
使用指定的密码加密导出文件。您可以将任何字符串用作密码。
/d 参数通过用指定的密码加密会话密钥和安全属性来创建安全导出文件。必须提供密码才能在“导入”操作中使用此文件。
如果省略了此参数或密码参数,则导出文件通过空白密码来加密。这样只有安全属性才被加密,而且任何管理员都可使用该导出文件来导入配置数据库配置。
/inherited
将已导出密钥的继承属性添加到导出文件。如果没有此参数,则导出文件不包含从较高级别项继承的属性。
/children
将指定密钥的子密钥递归添加到导出文件。
/s Computer
在指定的远程计算机上运行脚本。键入不带反斜杠的计算机名或 IP 地址。在默认情况下,脚本在本地计算机上运行。
/u [Domain\]User
使用指定的用户帐户的权限运行脚本。该帐户必须是远程计算机上 Administrators 组的成员。在默认情况下,脚本使用本地计算机当前用户的权限运行。
/p Password
指定在 /u 参数中指定的用户帐户的密码。如果您忽略该参数,则脚本会提示您输入密码且不显示所键入的文本。
/?
在命令提示符下显示帮助。
注释
• |
要执行该过程,您必须是本地计算机上 Administrators 组的成员,或者您必须被委派了适当的权限。如果计算机已加入某个域,则 Domain Admins 组的成员可能会执行该过程。作为安全性最佳操作,请考虑使用“运行方式”执行此过程。详细信息,请参阅默认本地组、默认组以及使用“运行方式”。 |
• |
使用引号括起包含空格的配置数据库路径元素。仅括起带空格的元素,不包括整个路径。例如,应键入 "Default FTP Site"/IISAdmin,而非 "Default FTP Site/IISAdmin"。 |
示例
下面的示例显示了如何在特定的情况下使用 iiscnfg /export。
导出网站配置
下列命令将 Finance 网站的配置导出到 C:\Finance\Finance.xml 文件。此命令使用 /sp 参数来指定网站的配置数据库路径 /lm/W3SVC/2,使用 /children 参数来导出配置的所有子密钥。它还使用 /inherited 参数将继承属性包括在导出文件中。这将确保网站配置保留这些属性,即使它被导入到不同的系统。
iiscnfg /export /f c:\finance\finance.xml /sp /lm/w3svc/2 /children /inherited
作为响应,Iiscnfg.vbs 显示以下成功消息:
Configuration exported from /lm/w3svc/2 to file c:\finance\finance.xml
结果文件将包括 /lm/w3svc/2 路径内的所有密钥和子密钥。它还包括包含了所有继承属性的值的 IisInheritedProperties 密钥。
导出本地计算机的整个 IIS 配置
下列命令将本地计算机的 IIS 配置导出到 D:\IIStest\Config.xml 文件。它使用 /f 参数指定配置数据库的文件名和位置,使用 /sp 参数指定配置数据库的根项 (/)。/children 参数将根密钥的所有子密钥以递归方式添加到导出文件。(如果没有 /children 参数,则只导出根目录项。)最后,该命令使用 /d 参数和密码加密导出文件。
iiscnfg /export /f d:\iistest\config.xml /sp / /children /d p@sswoRd61
作为响应,Iiscnfg.vbs 显示以下成功消息:
Path / has been exported to d:\iistest\config.xml
请注意即使完整导出该配置也与系统的 Metabase.xml 文件不同。会话密钥、访问控制列表 (ACL) 和密码会有所不同。
另外,仅通过查看该导出文件无法判别是否加密。不过,如果比较同一文件的加密版和未加密版,将能发现加密版本中的安全属性的值已发生更改。因此,如果没有密码,则该文件将无法用于 import 命令。
iiscnfg /import
将 XML 配置数据库导出文件的配置设置添加到 IIS 服务器的配置数据库。
语法
iiscnfg[.vbs] /import /f [Path\]FileName /sp SourcePath /dp DestinationPath [/d EncryptingPassword] [/children] [/inherited] [/merge] [/s Computer [/u [Domain\]User [/p Password]]]
参数
/f [Path\]FileName
必需。指定 XML 源文件的路径和文件名。
文件路径必须是本地路径。将文件导入到远程计算机时,/f 参数是指远程计算机上的某个路径。
/sp SourcePath
必需。指定正在导入的密钥在 XML 文件中的位置。当密钥在 XML 文件中出现时,输入其配置数据库路径。要导入源文件中的所有密钥,请输入根密钥的配置数据库路径。
/dp DestinationPath
必需。指定在配置数据库中放置导入密钥的位置。输入配置数据库路径。
如果指定的路径在配置数据库中已经存在,则导入密钥将覆盖和替换当前在该配置数据库路径中的密钥而没有任何警告。
/d EncryptingPassword
指定用于加密配置数据的密码。
加密配置文件时需要此参数。如果没有提供加密文件的密码,或者如果提供了不正确的密码,则此命令将失败。
/children
以递归方式导入指定密钥的子密钥。
/inherited
导入密钥的继承属性。只有当源文件包括继承属性时,此参数才有效。
/merge
将 XML 文件中的密钥与现有配置数据库密钥合并。如果没有该参数,则 XML 文件中的项将替换同一个配置数据库路径中的现有项。
/merge 参数将只出现在 XML 文件中的项添加到配置数据库中,保留配置数据库中不在 XML 文件中存在的项,当项同时出现在 XML 文件和配置数据库中时,则应用 XML 文件中的值。
/s Computer
在指定的远程计算机上运行脚本。键入不带反斜杠的计算机名或 IP 地址。在默认情况下,脚本在本地计算机上运行。
/u [Domain\]User
使用指定的用户帐户的权限运行脚本。该帐户必须是远程计算机上 Administrators 组的成员。在默认情况下,脚本使用本地计算机当前用户的权限运行。
/p Password
指定在 /u 参数中指定的用户帐户的密码。如果您忽略该参数,则脚本会提示您输入密码且不显示所键入的文本。
/?
在命令提示符下显示帮助。
注释
• |
要执行该过程,您必须是本地计算机上 Administrators 组的成员,或者您必须被委派了适当的权限。如果计算机已加入某个域,则 Domain Admins 组的成员可能会执行该过程。作为安全性最佳操作,请考虑使用“运行方式”执行此过程。详细信息,请参阅默认本地组、默认组以及使用“运行方式”。 |
• |
使用引号括起包含空格的配置数据库路径元素。仅括起带空格的元素,不包括整个路径。例如,应键入 "Default FTP Site"/IISAdmin,而非 "Default FTP Site/IISAdmin"。 |
• |
导入的密钥必须是配置数据库路径中新位置中的预期类型。如果密钥是非预期类型,则配置将无法正常运行。例如,不要将事件日志记录配置 (/LM/Logging) 导入到网站配置路径,如 /LM/W3SVC/3。 |
• |
使用 Iiscnfg.vbs 所做的更改可立即生效。当文件更新(每 5 秒钟或每 50 次更改)时,这些更改将反映在 MetaBase.xml 文件中。 |
示例
下列示例将显示如何在特定的情况下使用 iiscnfg /import。
从导出文件中导入网站
下列命令将 NewSite 网站配置从 C:\Config.xml 文件导入到配置数据库。
该命令使用 /f 参数指定源文件的名称和位置。它使用 /sp(源路径)参数来指明要导入的密钥在 Config.xml 文件中的位置。此时,NewSite 配置将位于 Config.xml 文件的 /lm/w3svc/5 路径中。然后,它将使用 /dp(目标路径)参数来指定应该放置该导入密钥的配置数据库位置。此时,应该将 NewSite 配置密钥导入到配置数据库中的 /lm/w3svc/3 位置中。最后,它将在导入操作中使用 /children 参数包含 /lm/w3svc/5 的子密钥。如果没有 /children 参数,则只导入网站根目录。
请记住 /import 操作进行覆盖时没有警告。如果配置数据库在 /lm/w3svc/3 位置已经具有密钥,则这些密钥将被导入密钥所替换。
iiscnfg.vbs /import /f c:\config.xml /sp /lm/w3svc/5/Root/NewSite /dp /lm/w3svc/3 /children
作为响应,Iiscnfg.vbs 显示以下成功消息:
Configuration imported from /lm/w3svc/5 in c:\config.xml to /lm/w3svc/3 in the Metabase.
使用此命令后,NewSite 配置将出现在第三个网站的 IIS 中,其配置数据库路径为 /lm/W3SVC/3。
将日志记录配置导入到远程计算机
下列过程将 C:\IISLogging.xml 中的自定义日志记录配置导入到远程计算机的 IIS 配置数据库中。会使用该方法或者该方法的扩展将配置传播到一组服务器中。
将日志记录配置导入到远程计算机的步骤分为两步:
1. |
将源文件复制到远程计算机。(Iiscnfg.vbs 不允许 /f 参数中有远程路径。) |
2. |
将配置导入到 IIS。 |
第一个命令将 Iislogging.xml 文件复制到远程服务器 Svr126:
copy IISLogging.xml \\Svr126\c$
第二个命令将 Iislogging.xml 导入到 Svr126 的 IIS 配置中。它使用 /f 参数来标识源文件,使用 /sp 参数来指定要导入的 /LM/Logging/Custom Logging 配置数据库路径,使用 /dp 参数来将导入密钥放在目标配置的同一位置 /LM/Logging/Custom Logging。(使用引号将包括空格的路径元素引起来。)它使用 /children 参数来导入日志记录密钥的所有子密钥。
为了在 Svr126 上操作,它使用 /s 参数指定远程计算机,使用 /u 和 /p 参数运行具有远程计算机上的用户管理员帐户权限的脚本。
iiscnfg /import /f C:\IISLogging.xml /sp "/lm/logging/custom logging" /dp "/lm/logging/custom logging" /children /s Svr126 /u Svr126\Administrator /p p@ssword1#
作为响应,Iiscnfg.vbs 显示以下成功消息:
正在连接到服务器...已完成。配置已从文件 C:\IISLogging.xml 中的 /lm/logging/custom logging 中导入到配置数据库的 /lm/logging/custom logging 中。
结果,/LM/Logging/Custom Logging 密钥及其子密钥从本地配置数据库复制到 Svr126 的配置数据库中。
将虚拟目录与网站合并
该示例通过对标准的 import 操作与使用 /merge 参数的 import 操作进行比较来演示 /merge 参数如何工作。
两个命令都使用同一导入文件 Invest_vdir.xml 来更新 eb 网站的 Investments 虚拟目录的属性。
下面的示例显示在运行任何 import 操作之前 Investments 配置数据库密钥的情况。(此示例是从使用 Iisback.vbs:IIS 备份管理脚本 创建的配置数据库的备份副本中获得的)。
导入前的配置数据库
<IIsWebVirtualDirLocation ="/LM/W3SVC/1509060625/root/Investments" AccessFlags="AccessRead | AccessScript" AppFriendlyName="Investments" AppIsolated="2" AppRoot="/LM/W3SVC/1509060625/Root/Investments" DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc" Path="E:\public\Download" > </IIsWebVirtualDir>
下面的示例显示了将在 import 操作中使用的 Invest_vdir.xml 文件的内容。(此示例通过导出 Investments 配置数据库密钥然后编辑导出文件来创建。)
请注意 Investments 密钥的下列属性在 XML 文件中已发生更改:
• |
AccessFlags 属性的值已更改。 |
• |
添加了 AuthFlags 属性。 |
• |
省略了 DirBrowseFlags 属性。 |
导入文件内容
<IIsWebVirtualDirLocation ="/LM/W3SVC/1509060625/root/Investments" AccessFlags="AccessRead" AuthFlags="AuthAnonymous | AuthNTLM" AppFriendlyName="Investments" AppIsolated="2" AppRoot="/LM/W3SVC/1509060625/Root/Investments" Path="E:\public\Download" > </IIsWebVirtualDir>
“命令 1:标准导入”
下列命令在不使用 /merge 参数的情况下将 Invest_vdir.xml 文件导入到配置数据库。该命令指示 IIS 将配置数据库中的 Investments 项替换为 XML 文件中的 Investments 项。
该命令使用 /f 参数来指定导入文件,并使用源路径 (/sp) 和目标路径 (/dp) 参数中的同一配置数据库路径。
iiscnfg /import /f e:\iistest\Invest_vdir.xml /sp /LM/W3SVC/1509060625/root/Investments /dp /LM/W3SVC/1509060625/root/Investments
作为该命令的结果,配置数据库中的 Investments 项与 Invest_vdir.xml 导入文件中的 Investments 项完全相同。
“命令 2:导入并合并”
下列命令将 Invest_vdir.xml 文件中的 Investments 密钥合并到配置数据库。/merge 参数将指示 IIS 将新的属性从导入文件添加到配置数据库、使不在导入文件中的配置数据库属性保持不变,而且当属性同时出现在导入文件和配置数据库中时应用导入文件值。
该命令除了添加了 /merge 参数外,其他都与命令 1 相同。
iiscnfg /import /f e:\iistest\Invest_vdir.xml /sp /LM/W3SVC/1509060625/root/Investments /dp /LM/W3SVC/1509060625/root/Investments /merge
使用该命令后,配置数据库中的 Investments 密钥的内容是其源的组合,如下例所示。
请注意配置数据库中的 Investments 密钥的下列属性已发生更改:
• |
在配置数据库和 XML 文件中显示的 AccessFlags 属性的值已更改。XML 文件中的值现在出现在配置数据库中。 |
• |
已添加仅在 XML 文件中显示的 AuthFlags 属性。 |
• |
仅在配置数据库中显示的 DirBrowseFlags 属性没有更改。 |
<IIsWebVirtualDirLocation ="/LM/W3SVC/1509060625/root/Investments" AccessFlags="AccessRead" AppFriendlyName="Investments" AppIsolated="2" AppRoot="/LM/W3SVC/1509060625/Root/Investments" AuthFlags="AuthAnonymous | AuthNTLM" DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc" Path="E:\public\Download" > </IIsWebVirtualDir>
iiscnfg /copy
将 IIS 配置数据库和架构从一台计算机复制到另一台计算机。
语法
iiscnfg[.vbs] /copy /ts TargetComputer /tu TargetUser /tp TargetPassword [/s Computer [/u [Domain\]User [/p Password]]]
参数
/ts TargetComputer
必需。将 IIS 配置数据库复制到指定的计算机。键入不带反斜杠的 IP 地址或计算机名。
/tu TargetUser
必需。指定用于连接到目标计算机的帐户。以 [Domain]\User 的格式键入用户帐户。该帐户必须是目标计算机上 Administrators 组的成员。
此参数是必需的,即使本地计算机的当前用户是目标计算机的管理员。
/tp TargetPassword
必需。指定 /tu 参数所指定的帐户的密码。
/s Computer
将指定的远程计算机的 IIS 配置数据库复制到目标计算机上。此参数在远程计算机上运行脚本。键入不带反斜杠的远程计算机的名称或 IP 地址。默认值是本地计算机。
/u [Domain\]User
使用指定的用户帐户的权限运行脚本。默认为本地计算机的当前用户。如果当前用户不是远程计算机的管理员,则必须使用该参数。
/p Password
指定在 /u 参数中指定的用户帐户的密码。如果忽略该参数,IISCnfg 将提示您输入密码并隐藏键入的文本。
/?
在命令提示符下显示帮助。
注释
• |
要执行该过程,您必须是本地计算机上 Administrators 组的成员,或者您必须被委派了适当的权限。如果计算机已加入某个域,则 Domain Admins 组的成员可能会执行该过程。作为安全性最佳操作,请考虑使用“运行方式”执行此过程。详细信息,请参阅默认本地组、默认组以及使用“运行方式”。 |
• |
默认情况下,IISCnfg 将本地计算机的配置数据库复制到 /ts 参数所指定的目标计算机中。但是,可以使用 /s 参数将其他计算机的配置数据库复制到目标计算机上。 |
• |
复制操作使用 Iisback.vbs:IIS 备份管理脚本来制作源配置数据库和架构的备份副本。然后,它将备份副本文件(.MDX 和 .SCX)复制到目标计算机,然后使用 Iisback.vbs:IIS 备份管理脚本来使用备份副本替换目标计算机上的配置数据库和架构。尽管可手动完成这些操作,IISCnfg 复制操作将提供比较方便的一步方法来复制 IIS 配置。 |
• |
该复制操作不复制与 IIS 配置相关的服务器内容,如网页和 FTP 文件。 |
• |
复制操作将更改配置数据库中计算机特定和系统特定的属性,以便这些属性在目标计算机中有效。不过,它不调整目录或文件路径。这样该配置中的路径可能在目标计算机中无效。 |
示例
下面的示例显示了如何在特定的情况下使用 iiscnfg /copy。
复制本地计算机的 IIS 配置
下列命令将本地计算机的 IIS 配置复制到 SVR01 服务器。该命令使用 /ts 参数来标识目标服务器,使用 /tu 和 tp 参数来提供用户在 SVR01 服务器上的管理员帐户和密码。
iiscnfg /copy /ts SVR01 /tu SVR01\Admin06 /tp P@ssWord6
作为响应,Iiscnfg.vbs 显示以下成功消息。
服务器 127.0.0.1 备份的备份已经完成。
IP 地址 127.0.0.1 是环回地址,并且通常指的是本地计算机。仅当复制本地计算机的配置时,才使用此地址。
复制远程计算机的 IIS 配置
下列命令将远程计算机 SRV06 的IIS 配置复制到 MAINBKP 服务器。此命令使用 /s 命令来标识远程计算机,使用 /u 参数来提供用户在 SRV06 计算机上的管理员密码。它还使用 /ts 参数来标识目标服务器,使用 /tu 和 tp 参数来提供用户在 MAINBKP 服务器上的管理员帐户和密码。
与可选的 /p 参数不同,/tp 参数是必需的。如果省略此参数,此命令将失败。
iiscnfg /copy /s SRV06 /u Domain01\Admin01 /ts MAINBKP /tu MAINBKP\Admin01 /tp P@ssWord6
作为响应,Iiscnfg.vbs 将提示输入由 /u 参数指定的帐户密码。(它不回显键入的密码字符。)然后,确认密码后,它将复制该配置并显示复制操作已成功完成的消息。
输入密码:Processing...服务器 SRV06 备份的备份已经完成。
iiscnfg /save
将 IIS 配置数据库和架构保存到磁盘。
语法
iiscnfg[.vbs] /save [/s Computer [/u [Domain\]User [/p Password]]]
参数
/s Computer
将指定的远程计算机的 IIS 配置数据库复制到目标计算机上。此参数在远程计算机上运行脚本。键入不带反斜杠的远程计算机的名称或 IP 地址。默认值是本地计算机。
/u [Domain\]User
使用指定的用户帐户的权限运行脚本。默认为本地计算机的当前用户。如果当前用户不是远程计算机的管理员,则必须使用该参数。
/p Password
指定在 /u 参数中指定的用户帐户的密码。如果忽略该参数,IISCnfg 将提示您输入密码并隐藏键入的文本。
/?
在命令提示符下显示帮助。
注释
• |
要执行该过程,您必须是本地计算机上 Administrators 组的成员,或者您必须被委派了适当的权限。如果计算机已加入某个域,则 Domain Admins 组的成员可能会执行该过程。作为安全性最佳操作,请考虑使用“运行方式”执行此过程。详细信息,请参阅默认本地组、默认组以及使用“运行方式”。 |
• |
使用脚本或 IIS 管理器对配置数据库所做的任何更改都将首先写入到内存,然后在下一个计划更新(可能在几分钟后发生)进行时写入到磁盘。这样管理员可以对配置数据库进行更改,然后仅打开 metabase.xml 以查看是否未反映所作的更改。iiscnfg.vbs 中的 /save 命令通过将更改立即保存到磁盘来解决该问题。 |
示例
下面的示例显示在特定情况下如何使用 iiscnfg /save。
保存本地计算机的 IIS 配置
如下命令将 IIS 配置保存到本地计算机上的磁盘。
iiscnfg /save
作为响应,Iiscnfg.vbs 显示以下成功消息。
配置已保存。
保存远程计算机的 IIS 配置
如下命令将 IIS 配置保存到本地计算机上的磁盘。
iiscnfg /save /s SourceServer /u Administrator /p Kj30W
作为响应,iiscnfg.vbs 显示下列消息。
配置已保存
注释
• |
IISCnfg.vbs 导入和导出由 IIS 存储在 IIS 服务器的配置数据库中的所有或部分配置信息。/copy 操作将 IIS 服务器的整个配置数据库和架构复制到目标计算机。/save 操作将 IIS 服务器的整个配置数据库和架构复制到目标计算机的磁盘上。 |
||||
• |
Iisback.vbs:IIS 备份管理脚本,即 IIS 备份管理脚本,还会保存和恢复 IIS 配置。不过,Iisback.vbs 将备份整个配置数据库和架构。无法使用它来保存或恢复配置的选定元素。 |
||||
• |
IISCnfg 复制操作 (/copy) 将替换以前在 Windows 中包括的 IISSync.vbs 和 IISRepl.vbs 工具的功能。 |
||||
• |
Iiscnfg 要求
|
||||
• |
IIS 服务器的配置数据库包括系统特定和计算机特定的属性。不要在未加修改的情况下将一台 IIS 服务器的配置导入到另一台 IIS 服务器。请改用 Iisback.vbs:IIS 备份管理脚本 或 IISCnfg 复制操作(/copy),这样将替代系统特定和计算机特定的属性,从而使该配置在目标计算机上有效。有关导入和导出 IIS 配置数据库的信息,请搜索 IIS 6.0 帮助中的“配置数据库导入/导出”。 |
||||
• |
连接到指定计算机上的 IIS 服务时,Iiscfng.vbs 将显示“连接到服务器”消息。每次使用 Iiscnfg.vbs 时,不管是在本地或远程计算机,都会出现该消息。 |
||||
• |
Iiscnfg.vbs 将提供包括导出文件中的继承属性的选项。如果选择此选项,则 Iiscnfg.vbs 会将导出密钥的继承属性添加到导出文件中的 IIsInheritedProperties 密钥。从该文件导入项时,可以选择导入项的继承属性。 在导入继承属性时,导入密钥将保留导出配置中所继承的属性。如果未导入继承属性,则项继承导入配置的属性。 |
||||
• |
为了防止对导出文件的未经授权的使用,IISCnfg.vbs 使您通过密码来加密导出文件。该密码将对会话密钥加密,后者反过来对已设置安全属性的所有属性进行加密。 您可以读取加密的导出文件(只对会话密钥和安全属性进行加密),并且可以删除文件。不过无法在 /import 操作中使用导出文件,除非提供了加密密码。另外,无法从导出文件删除密码加密,也无法更改加密密码。 如果无法使用密码加密,则会话密钥和安全属性通过空白密码来加密,这可防止被读取,不过允许 Administrators 组的任何成员从导出文件导入配置数据库。IIS 5.1 和 6.0 都不支持导出文件的计算机密钥加密。 |
格式图例
格式 | 意义 |
斜体 |
用户必须提供的信息 |
粗体 |
用户必须按照显示的内容精确键入的元素 |
省略号 (...) |
可在命令行中重复多次的参数 |
括号 ([]) 之间的内容 |
可选项目 |
大括号 ({}) 内的内容;用竖杠 (|) 隔开的选项。例如:{even|odd} |
用户必须从中只选择一个选项的选项组 |
Courier font |
代码或程序输出 |