跨多个服务器的Powershell文件比较

时间:2018-04-06 16:18:34

标签: powershell

我是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 )

1 个答案:

答案 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>