小编Jus*_*ook的帖子

Powershell:从Receive-Job获取输出

我有一系列正在运行的作业.完成后我使用receive-job并将输出写入屏幕.我想获取该输出并将其记录到文件中.我不希望在作业运行时产生输出,因为一次运行多个作业,记录将会散布.Get-Job | Receive-Job以非常有条理的方式打印输出.

我已经尝试了以下所有内容,没有输出写入文件或存储在变量中,它只是进入屏幕:

#Wait for last job to complete
While (Get-Job -State "Running") {    
    Log "Running..." -v $info
    Start-Sleep 10        
}    
Log ("Jobs Completed. Output:") -v $info

# Getting the information back from the jobs
foreach($job in Get-Job){
    Receive-Job -Job $job | Out-File c:\Test.log -Append
    $output = Receive-Job -Job $job        
    Log ("OUTPUT: "+$output)
    Receive-Job -Job $job -OutVariable $foo
    Log ("FOO: "+$foo)
}
Run Code Online (Sandbox Code Playgroud)

编辑:在看到Keith的评论之后,我已经删除了foreach中额外的Receive-Job调用:

# Getting the information back from the jobs
foreach($job in Get-Job){
    Receive-Job -Job $job -OutVariable temp …
Run Code Online (Sandbox Code Playgroud)

powershell jobs

20
推荐指数
4
解决办法
6万
查看次数

Log4net traceappender没有记录任何内容

我想将log4net记录的所有内容重定向到System.Diagnostics Trace类.我对我应该做的事情的理解是将log4net指向system.diagnostics.traceappender,然后配置system.diagnostics.这是我的web.config中的重要部分:

<log4net>
<appender name="trace" type="log4net.Appender.TraceAppender, log4net">
  <immediateFlush value="true" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern"
         value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" />
  </layout>
</appender>

<root>
  <priority value="DEBUG"/>
  <appender-ref ref="trace"/>
</root>    
</log4net>


<system.diagnostics>
<sources>

  <source name="Console" switchName="DefaultSwitch">
    <listeners>
      <add type="System.Diagnostics.DefaultTraceListener" name="Default">
        <filter type="" />
      </add>
    </listeners>
  </source>

  <source name="Metabase" switchName="MetabaseSwitch">
    <listeners>
      <add name="MetabaseListener" />
      <remove name="Default" />
    </listeners>
  </source>

  <source name="TextFile" switchName="TextFileSwitch">
    <listeners>
      <add name="TextFileListener" />
      <remove name="Default" />
    </listeners>
  </source>

</sources>
<sharedListeners>
  <!--<add name="ConsoleListener" type="XXX.Manufacturing.Utilities.Diagnostics.ColorConsoleTraceListener,XXX.Manufacturing.Utilities" />-->
  <add name ="TextFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextFile.log" /> …
Run Code Online (Sandbox Code Playgroud)

log4net system.diagnostics

7
推荐指数
1
解决办法
1万
查看次数

点击expectedexception测试结束后

我正在测试抽象基础存储库类的delete方法,该类由其他几个存储库类继承.MyTestRepository继承了base,因此我可以对base的方法运行测试,而不会限制我的测试使用具体的类.当我运行我的单元测试时它会通过,但我注意到之后我在测试数据库中有几个OrderDetail和Schedule对象,这些对象是由测试生成的(对象是在测试初始化​​期间创建的)并且没有删除,而Order对象被删除.我添加了一些断点,并注意到一旦helper方法结束并且抛出了预期的异常,测试就会结束,而其他对helper的调用永远不会发生.

这是我第一次尝试进行单元测试.我的方法是错的吗?ExpectedException是否按预期工作,我是在滥用它,还是我应该使用另一种工具?我能想到的唯一方法就是在helper中设置try catch块,并在捕获DataAccessException时断言为true.

    [TestMethod]
    [ExpectedException(typeof(DataAccessException))]
    public void NHibernateRepositoryBaseDelete()
    {
        NHibernateRepositoryBaseDeleteHelper<Order, int>(myOrder, myOrder.OrderId);
        NHibernateRepositoryBaseDeleteHelper<OrderDetail, int>(myOrderDetail, myOrderDetail.OrderDetailId);
        NHibernateRepositoryBaseDeleteHelper<Schedule, int>(mySchedule, mySchedule.ScheduleId);
    }

    private static void NHibernateRepositoryBaseDeleteHelper<T, TKey>(T myItem, TKey myItemId)
    {
        MyTestRepository<T, TKey> myRepository = new MyTestRepository<T, TKey>();
        myRepository.Delete(myItem);
        myRepository.CommitChanges();

        myRepository.GetById(myItemId, false);
    }
Run Code Online (Sandbox Code Playgroud)

c# unit-testing exception

5
推荐指数
2
解决办法
1845
查看次数

无法检索模块类型错误

我以棱镜为例; 这是我第一次玩WPF.我写了两个模块; orderModule和orderDetailModule.我能够运行我的应用程序并将它们填充在一个屏幕上,现在我只想加载一个模块并通过单击按钮加载另一个模块.我以前在代码中加载我的模块,然后我注意到prism正在使用xml,所以我也尝试这样做.由于某种原因它无法找到它们,我得到的完整错误是:

Microsoft.Practices.Composite.Modularity.ModuleInitializeException未处理Message ="无法从加载的程序集中检索模块类型NetworkOrderManagement.WPF_Modules.Order,OrderModule.您可能需要指定更完全限定的类型名称."

这是我的app.config中的模块部分:

<modules>
<module assemblyFile="WPFOrderModule.dll" 
        moduleType="NetworkOrderManagement.WPF_Modules.Order, OrderModule" 
        moduleName="OrderModule"/>
<module assemblyFile="WPFOrderDetailModule.dll" 
        moduleType="NetworkOrderManagement.WPF_Modules.OrderDetail, OrderDetailModule" 
        moduleName="OrderDetailModule" 
        startupLoaded="false"/>
Run Code Online (Sandbox Code Playgroud)

来自链接文字

在模块配置部分中,定义您的模块.为此,请添加模块XML元素.该元素具有以下属性:

assemblyFile.此属性指定模块程序集的位置.此属性是必需的.

moduleType.此属性指定模块的程序集中实现IModule接口的类型.此属性是必需的.

MODULENAME.此属性指定模块的名称.此属性是必需的.

startupLoaded.此属性指定模块是否在启动时加载.如果其值为true(这是默认值),则应在启动时加载模块.如果其值为false,则不应在启动时加载模块; 相反,它应该按需加载.此属性不是必需的.

我实现IModule的OrderModule位于名称空间NetworkOrderManagement.WPF_Modules.Order中.

有任何想法吗?

wpf app-config module

5
推荐指数
1
解决办法
4873
查看次数

Powershell:所有新对象都不是平等的?

我正在研究一些简短的演示脚本,以便在powershell上进行演示,当然我的一个简单的演示让我感到困惑.此演示的目的是显示在PowerShell中创建对象的不同方法.这是我的代码:

$file = ls 'C:\temp' | Where-Object {$_.Extension -eq '.txt'}
$file.FullName
$path = 'C:\temp\jdh.txt'
$newfile = New-Object -TypeName System.IO.FileInfo -ArgumentList $path
$newfile.FullName

$file.GetType()
$newfile.GetType()
$file
$newfile

$file | Get-Content | out-null
$newfile | Get-Content | out-null
Run Code Online (Sandbox Code Playgroud)

简单吧?通过不同的方法创建两个FileInfo对象并读取它们.输出显示文件相同:

C:\temp\jdh.txt
C:\temp\jdh.txt

IsPublic IsSerial Name                                     BaseType                                                                               
-------- -------- ----                                     --------                                                                               
True     True     FileInfo                                 System.IO.FileSystemInfo                                                               
True     True     FileInfo                                 System.IO.FileSystemInfo                                                               

LastWriteTime : 4/10/2013 3:38:29 PM
Length        : 46046
Name          : jdh.txt


LastWriteTime : 4/10/2013 3:38:29 PM
Length        : 46046
Name          : jdh.txt
Run Code Online (Sandbox Code Playgroud)

但是,当Get-Content尝试读取$ newfile对象时,我收到以下错误:

Get-Content …
Run Code Online (Sandbox Code Playgroud)

powershell

5
推荐指数
1
解决办法
1977
查看次数

Azure 管道阶段和作业依赖项

我正在尝试创建两个用于与 API 集成的管道模板,其中 1) 安装应用程序 2) 将应用程序部署到 API 管理的某些设备。安装模板处理安装并获取部署模板部署应用程序所需的应用程序 ID。稍后无法查询 API 来获取应用程序 ID,因此我必须将其提供给安装模板以供部署模板稍后使用。安装任务将被调用一次,但部署任务可以针对不同的设备“环”被调用多次。

我需要支持以下场景,其中部署模板可以依赖于当前阶段的作业,并且可以依赖于稍后阶段的同一作业。

stages:
- stage: NonProd
  jobs:
  - template: install.yml@pipeline_template
  - template: deploy.yml@pipeline_template  

- stage: Prod
  dependsOn: NonProd
  jobs:
  - template: deploy.yml@pipeline_template
Run Code Online (Sandbox Code Playgroud)

我读到我们现在可以在这里创建这些类型的依赖项,但是是否可以将依赖项设置为来自先前阶段或先前作业?

我考虑尝试将它们合并到一个模板中,但不幸的是,如果相同版本的应用程序已经存在,安装步骤将不会提供应用程序 ID,而只是一个错误。

yaml azure-devops azure-pipelines

5
推荐指数
1
解决办法
2万
查看次数

试图了解TransactionScope

我正在尝试制作一个快速的虚拟应用程序,以便我可以了解System.Transactions的细节.此应用程序与2个不同的SQLExpress DB交互.如果我在组件服务中提取事务统计信息,我可以在打开第二个连接时看到在outerScope中启动事务.如果failOuter为true,则事务将中止,但不会抛出任何异常.当failInner为true时,抛出TransactionAbortedException.

来自MSDN:

当您的应用程序完成它想要在事务中执行的所有工作时,您应该只调用一次Complete方法以通知事务管理器提交事务是可以接受的.将调用Complete作为using块中的最后一个语句是一种很好的做法.

无法调用此方法会中止事务,因为事务管理器将此解释为系统故障,或等效于事务范围内引发的异常.

如果作用域创建事务并且事务中止,则抛出TransactionAbortedException.

基于此,我希望我的outerScope抛出TransactionAbortedException,因为我的事务统计信息每次运行我的应用程序时都会显示一个中止的事务,并将failOuter设置为true.我的方法返回true,因为即使事务中止也不会引发异常.除非我中止内部事务,否则它的行为与我期望的一样.任何澄清都将是最受欢迎的.

public bool CreateNestedTransaction(bool failOuter, bool failInner)
    {
        try
        {
            using (TransactionScope outerScope = new TransactionScope())
            {

                /* Perform transactional work here */
                using (SqlConnection myConnection = new SqlConnection("server=(local)\\SQLExpress;Integrated Security=SSPI;database=test1"))
                {
                    SqlCommand myCommand = new SqlCommand();
                    myConnection.Open();
                    myCommand.Connection = myConnection;

                    myCommand.CommandText = "update test set Value = ((select Value from test where Id = (select max(Id) from test))+1) where Id = (select max(Id) from test)";
                    myCommand.ExecuteNonQuery();
                }


                using (SqlConnection myConnection = new SqlConnection("server=(local)\\SQLExpress;Integrated Security=SSPI;database=test1")) …
Run Code Online (Sandbox Code Playgroud)

c# transactions transactionscope

3
推荐指数
1
解决办法
1万
查看次数

Powershell远程处理和页面文件

我写了一个powershell脚本,它连接到远程机器,意图在所述机器上执行软件卷展栏.基本上它连接,映射驱动器,将卷展栏从映射驱动器复制到目标机器,然后执行perl脚本来安装卷展栏.如果我手动执行这些步骤一切正常.当我尝试使用我的脚本时,远程机器上的perl脚本失败,说"分页文件太小,无法完成此操作".

有人可以解释我在远程操作时需要考虑的注意事项吗?我已经尝试过监控内存使用情况,但我没有看到任何异常情况.页面文件操作系统是否宽,或者是否存在某些类型的每个用户配置,我的脚本在连接时应该设置?

如果需要,我可以发布我的脚本的片段,但脚本是426行,所以我认为完全发布将是压倒性的.

powershell remoting pagefile

3
推荐指数
1
解决办法
2925
查看次数

ExpectedException没有捕获异常,但我可以用try catch捕获它

关于这个的任何想法?我正在尝试编写一个单元测试,它将删除一个项目并通过尝试通过其ID来检索项目来确认该项目不再存在于存储库中,该ID应该抛出DataAccessException.但是,测试仍然失败.我添加了一个try catch块,果然我抓住了我期待的异常.我正在使用VS测试工具进行单元测试.

    [ExpectedException(typeof(DataAccessException))]
    private static void NHibernateRepositoryBaseDeleteHelper<T, TKey>(T myItem, TKey myItemId)
    {
        MyTestRepository<T, TKey> myRepository = new MyTestRepository<T, TKey>();
        myRepository.Delete(myItem);
        myRepository.CommitChanges();
        try
        {
            myRepository.GetById(myItemId, false);
        }
        catch (DataAccessException dae)
        {
            Assert.IsTrue(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# unit-testing exception visual-studio

2
推荐指数
1
解决办法
2359
查看次数

NHibernate:坚持与孩子对象

我试图用一组子对象来持久化对象.由于存在FK关系,我不能先坚持孩子.我可以先保存父级,然后将子级添加到它上面,但这会引入更多工作.基本上我只是试图一步完成保存完全填充的对象而不是将其分成几部分.我的映射有什么问题(抱歉它看起来很难看)或者是我的方法?

家长:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="NetworkOrderManagement.Core.Order, NetworkOrderManagement.Core" table="NETORDMGMT.ORDERHEADER" lazy="false" >
    <id name="OrderId" column="ORDERID" type="int">
      <generator class="seqhilo">
        <param name="sequence">ORDERID_SEQ</param>
      </generator>
    </id>
    <property name="TransmissionDate" column="TRANSMISSIONDATE" type="DateTime"/>
    <property name="StoreNumber" column="STORENUMBER" type="Int16"/>
    <property name="Department" column="DEPARTMENT" type="Int16"/>
    <property name="OrderType" column="ORDERTYPE" type="Int16"/>
    <property name="OrderSequence" column="ORDERSEQUENCE" type="Int16"/>
    <property name="ExtractTime" column="EXTRACTTIME" type="DateTime"/>
    <property name="Status" column="STATUS" type="Int16"/>
    <property name="ReceivedTime" column="RECEIVEDTIME" type="DateTime"/>
    <bag name="OrderDetail" table="NETORDMGMT.ORDERDETAIL" 
         lazy="false" cascade="all" inverse="true">
      <key column="ORDERID" on-delete="cascade"/>
      <one-to-many class="NetworkOrderManagement.Core.OrderDetail, NetworkOrderManagement.Core"  />
    </bag>
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

儿童:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class …
Run Code Online (Sandbox Code Playgroud)

nhibernate

2
推荐指数
1
解决办法
7461
查看次数