当我只列出具有默认格式的网站时,它会显示物理路径。
PS C:\Windows\system32> $sm = Get-IISServerManager
PS C:\Windows\system32> $sm.Sites
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
Default Web Site 1 Started %SystemDrive%\inetpub\wwwroot http *:80:
Test 2 Started C:\inetpub\wwwroot_Test http *:5007:
PS C:\Windows\system32>
但是我在对象上找不到任何相应的属性。
$sm.Sites[0] | Format-List *
ApplicationDefaults : Microsoft.Web.Administration.ApplicationDefaults
Applications : {Default Web Site/, ...}
Bindings : {http *:80:}
Id : 1
Limits : Microsoft.Web.Administration.SiteLimits
LogFile : Microsoft.Web.Administration.SiteLogFile
Name : Default Web Site
ServerAutoStart : True
State : Started
TraceFailedRequestsLogging : Microsoft.Web.Administration.SiteTraceFailedRequestsLogging
VirtualDirectoryDefaults : Microsoft.Web.Administration.VirtualDirectoryDefaults
Attributes : {name, id, serverAutoStart, state}
ChildElements : {bindings, limits, logFile, traceFailedRequestsLogging...}
ElementTagName : site
IsLocallyStored : True
Methods : {Start, Stop}
RawAttributes : {[name, Default Web Site], [id, 1], [serverAutoStart, True], [state, 1]}
Schema : Microsoft.Web.Administration.ConfigurationElementSchema
直接问题:如何获取网站的物理路径?
间接问题:是否可以找到默认情况下对象的格式?然后我可以从那里查找物理路径。
答案 0 :(得分:1)
反编译并调试了几个小时后,我发现powershell在内部使用了该表达式:
$_.Applications["/"].VirtualDirectories["/"].PhysicalPath
不知道您应该如何在不进行反编译的情况下找到答案。
答案 1 :(得分:1)
这非常适合我的需求。只要记住在脚本中将{target site name}
定义为特定的站点名称,以防您在IIS下运行多个站点。
感谢@ΩmegaMan这个小宝石
答案 2 :(得分:1)
$physicalPath = (Get-Website "Default Web Site" | Select-Object).PhysicalPath
答案 3 :(得分:0)
我一直在使用
Import-Module Webadministration
gci "IIS:\Sites\{target site name}" `
| Where-Object {$_.NodeType -eq 'application'} `
| Sort-Object -Property PhysicalPath, name
答案 4 :(得分:0)
您可以通过以下方式获得物理路径:
echo (Get-WebApplication "Your application" | Select-Object).PhysicalPath