我是powershell的新手,请原谅noob问题。我正在尝试比较多个服务器上的目录,以确保它们是同步的。我正在从servers.txt文件中读取服务器,并将列表中的第一个服务器设置为源服务器。
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:MyDB;INIT=runscript from 'classpath:/com/camel/database.sql'" />
<property name="javax.persistence.jdbc.user" value="SA" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.hbm2ddl.auto" value="none" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.max_fetch_depth" value="4" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />
</properties>
我在Compare-Object调用中遇到了这个问题,我不确定要传递什么作为-ReferenceObject和-DifferenceObject属性。我希望ReferenceObject成为源服务器和文件路径的路径(server1 \ e $ \ appdirectory)和-differenceobject到列表中的其他服务器(server2 \ e $ \ appdirectory,server3 \ e $ \ appdirectory )
答案 0 :(得分:0)
你非常接近,但你的比较是错误的:
$ServerList = Get-Content -Path .\servers.txt
$Reference = (Get-ChildItem -Path "\\$($ServerList[0])\E$\appdirectory" -Recurse).FullName.Replace("\\$($ServerList[0])",'')
ForEach ($Server in $ServerList)
{
$CompareArgs = @{
ReferenceObject = $Reference
DifferenceObject = (Get-ChildItem -Path "\\$Server\E$\appdirectory" -Recurse).FullName.Replace("\\$Server",'')
}
Compare-Object @CompareArgs
}
为了更进一步,我实际上在参考服务器的文件列表中使用了Get-FileHash
和其余的发行版,但这不在我的答案范围内。< / p>